private void button3_Click(object sender, EventArgs e) { if (this.SelectedRow != -1) { if (cmbOmrType.SelectedValue == null) { MessageBox.Show("OMR種別を選択してください。"); } PictureBox pic = this.tableLayoutPanel1.GetControlFromPosition(1, this.SelectedRow) as PictureBox; if (pic == null) { return; } Image resultImg = pic.Image; TransArea area = (TransArea)pic.Tag; Image masterImage = this.TargetImage; Rectangle masterArea = area.TransRect; OcrSDK ocrSdk = new OcrSDK(); DocumentSDKCheckType omrType = (DocumentSDKCheckType)cmbOmrType.SelectedValue; Rectangle markArea = new Rectangle() { X = area.CharRect.X - area.TransRect.X, Y = area.CharRect.Y - area.TransRect.Y, Width = area.CharRect.X - area.TransRect.X + area.CharRect.Width, Height = area.CharRect.Y - area.TransRect.Y + area.CharRect.Height, }; if (omrType == DocumentSDKCheckType.OMR_CT_UNKNOWN) { markArea = new Rectangle() { X = 0, Y = 0, Width = area.TransRect.Width - 1, Height = area.TransRect.Height - 1, }; } var result = ocrSdk.executeOmr(resultImg, omrType, markArea, masterImage, masterArea); this.txtResult.Text = string.Format("Check_res:{0} \n Score:{1}", result.one_res[0].check_res.ToString(), result.one_res[0].score); } }
/// <summary> /// OMR認識処理 /// </summary> /// <param name="itemImage">項目画像</param> /// <param name="recogItem">認識対象情報</param> /// <returns>OMR認識結果</returns> public DocumentSDKOmrResult executeOmr(Image itemImage, DocumentSDKCheckType markType, Rectangle markArea, Image masterImg, Rectangle masterRect) { IDocumentSDKComponent documentSDK = DocumentSDKFactory.GetDocumentSDK(); FileStream stream = null; Image masterImage = null; List <DocumentSDKArea> areaList = new List <DocumentSDKArea>(); List <DocumentSDKArea> masterAreaList = null; try { // OMRパラメーターの設定 DocumentSDKOmrParam param = new DocumentSDKOmrParam() { check_num = DocumentSDKDefinition.OMR_CN_UNKNOWN, check_type = markType, threshold = SByte.Parse("50"), area_type = DocumentSDKAreaType.OMR_AT_SOLID, around_area = DocumentSDKAroundArea.OMR_AA_UNKNOWN, check_size_x = DocumentSDKDefinition.OMR_CS_UNKNOWN, check_size_y = DocumentSDKDefinition.OMR_CS_UNKNOWN, }; // OMR領域を設定(文字領域を抽出され場合、OCRの文字領域を使用する) DocumentSDKArea area = new DocumentSDKArea() { xs = markArea.Left, ys = markArea.Top, xe = markArea.Left + markArea.Width - 1, ye = markArea.Top + markArea.Height - 1, }; areaList.Add(area); if (markType == DocumentSDKCheckType.OMR_CT_UNKNOWN) { masterImage = masterImg; masterAreaList = new List <DocumentSDKArea>(); DocumentSDKArea masterArea = new DocumentSDKArea() { xs = masterRect.X, ys = masterRect.Y, xe = masterRect.X + masterRect.Width, ye = masterRect.Y + markArea.Height, }; masterAreaList.Add(masterArea); } // OMR処理の実行 DocumentSDKOmrResult result = documentSDK.ExecuteOmr(itemImage, areaList, masterImage, masterAreaList, param); return(result); } finally { // ファイルストリームの破棄 if (stream != null) { stream.Dispose(); } // マスター画像の破棄 if (masterImage != null) { masterImage.Dispose(); } } }