//传入图片进行识别 public static string ORC_(Bitmap img) { //""标示OCR识别调用失败 string re = ""; if (img == null) { return(re); } else { Bgr drawColor = new Bgr(Color.Blue); try { Image <Bgr, Byte> image = new Image <Bgr, byte>(img); using (Image <Gray, byte> gray = image.Convert <Gray, Byte>()) { _ocr.Recognize(); Tesseract.Character[] charactors = _ocr.GetCharacters(); foreach (Tesseract.Character c in charactors) { image.Draw(c.Region, drawColor, 1); } re = _ocr.GetBoxText(); } return(re); } catch (Exception ex) { return(re); } } }
private string Read(Image <Gray, byte> Img) { Image <Gray, byte> Img_resize = Img.Resize(Img.Width / 2, Img.Height / 2, Emgu.CV.CvEnum.Inter.Linear); string str = string.Empty; string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\"; using (var _ocr = new Tesseract(path, "eng", OcrEngineMode.TesseractOnly)) { _ocr.SetImage(Img_resize); _ocr.Recognize(); string s = _ocr.GetBoxText(1); s = s.Replace("\r", ""); string[] eachChar = s.Split('\n'); List <Rectangle> box = new List <Rectangle>(); for (int i = 0; i < eachChar.Length; i++) { if (eachChar[i] == "") { continue; } string[] chr = eachChar[i].Split(' '); char ct = Convert.ToChar(chr[0]); int val = (int)ct; if ((val >= 0x30 && val <= 0x39) || (val >= 0x41 && val <= 0x5a) || (val >= 0x61 && val <= 0x7a)) { str += chr[0]; box.Add(new Rectangle(Convert.ToInt32(chr[1]), Convert.ToInt32(chr[2]), Convert.ToInt32(chr[3]) - Convert.ToInt32(chr[1]), Convert.ToInt32(chr[4]) - Convert.ToInt32(chr[2]))); } } } return(str); }
public void TestOCREngGrayText() { using (Tesseract ocr = GetTesseract()) using (Image <Gray, Byte> img = new Image <Gray, byte>(480, 200)) { ocr.SetVariable("tessedit_char_whitelist", "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,"); IntPtr oclDevice = new IntPtr(); int deviceId = ocr.GetOpenCLDevice(ref oclDevice); String message = "Hello, World"; CvInvoke.PutText(img, message, new Point(50, 100), CvEnum.FontFace.HersheySimplex, 1.0, new MCvScalar(255)); // //ocr.Recognize(img); using (Image <Gray, Byte> rotatedImg = img.Rotate(10, new Gray(), false)) { ocr.PageSegMode = PageSegMode.AutoOsd; ocr.SetImage(rotatedImg); ocr.Recognize(); using (PageIterator pi = ocr.AnalyseLayout()) { Orientation or = pi.Orientation; LineSegment2D?baseLine = pi.GetBaseLine(PageIteratorLevel.Textline); if (baseLine.HasValue) { CvInvoke.Line(rotatedImg, baseLine.Value.P1, baseLine.Value.P2, new MCvScalar(255)); //Emgu.CV.UI.ImageViewer.Show(rotatedImg); } } String messageOcr = ocr.GetUTF8Text().TrimEnd('\n', '\r'); // remove end of line from ocr-ed text //EmguAssert.AreEqual(message, messageOcr, // String.Format("'{0}' is not equal to '{1}'", message, messageOcr)); Tesseract.Character[] results = ocr.GetCharacters(); String s1 = ocr.GetBoxText(); //String s2 = ocr.GetOsdText(); String s3 = ocr.GetTSVText(); String s4 = ocr.GetUNLVText(); using (PDFRenderer pdfRenderer = new PDFRenderer("abc.pdf", "./", false)) using (Pix imgPix = new Pix(img.Mat)) { //bool success = ocr.ProcessPage(imgPix, 1, "img", null, 100000, pdfRenderer); //EmguAssert.IsTrue(success, "failed to export pdf"); } } } }
// Use this for initialization void Start() { String[] names = new string[] { "eng.cube.bigrams", "eng.cube.fold", "eng.cube.lm", "eng.cube.nn", "eng.cube.params", "eng.cube.size", "eng.cube.word-freq", "eng.tesseract_cube.nn", "eng.traineddata" }; String outputPath = Path.Combine(Application.persistentDataPath, "tessdata"); if (!Directory.Exists(outputPath)) { Directory.CreateDirectory(outputPath); } foreach (String n in names) { TextAsset textAsset = Resources.Load <TextAsset>(Path.Combine("tessdata", n)); String filePath = Path.Combine(outputPath, n); #if UNITY_METRO UnityEngine.Windows.File.WriteAllBytes(filePath, textAsset.bytes); #else if (!File.Exists(filePath)) { File.WriteAllBytes(filePath, textAsset.bytes); } #endif } _ocr = new Tesseract(outputPath, "eng", OcrEngineMode.TesseractLstmCombined); Debug.Log("OCR engine loaded."); Image <Bgr, Byte> img = new Image <Bgr, byte>(480, 200); String message = "Hello, World"; CvInvoke.PutText(img, message, new Point(50, 100), Emgu.CV.CvEnum.FontFace.HersheySimplex, 1.0, new MCvScalar(255, 255, 255)); _ocr.SetImage(img); _ocr.Recognize(); Tesseract.Character[] characters = _ocr.GetCharacters(); foreach (Tesseract.Character c in characters) { CvInvoke.Rectangle(img, c.Region, new MCvScalar(255, 0, 0)); } String messageOcr = _ocr.GetBoxText().TrimEnd('\n', '\r'); // remove end of line from ocr-ed text Debug.Log("Detected text: " + message); Texture2D texture = TextureConvert.InputArrayToTexture2D(img, FlipType.Vertical); this.GetComponent <GUITexture>().texture = texture; this.GetComponent <GUITexture>().pixelInset = new Rect(-img.Width / 2, -img.Height / 2, img.Width, img.Height); }
public MainWindow() { InitializeComponent(); for (var i = 1; i < 15; i++) { ListView1.Items.Add(new ParkingEntry { Name = $"Person #{i}", PlateNumber = $"Plate #{i}", DateEntry = DateTime.Now, DateExit = DateTime.Now.AddHours(i) }); } var path = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var folder = System.IO.Path.Combine(path, "tessdata"); _licensePlateDetector = new LicensePlateDetector(folder); Mat m = new Mat(@"C:\Users\cayent\Desktop\ImageTest\222.jpg"); UMat um = m.GetUMat(AccessType.ReadWrite); this.ImagePlate.Image = um; //ProcessImage(m); _ocr = new Tesseract(folder, "eng", OcrEngineMode.TesseractLstmCombined, "ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890"); _ocr.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ-1234567890"); //create OCR engine //_ocr = new Tesseract(System.AppDomain.CurrentDomain.BaseDirectory + @"\Data\\", "eng", OcrEngineMode.TesseractLstmCombined); //_ocr.Init("", "eng", OcrEngineMode.TesseractLstmCombined); //_ocr.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ-1234567890"); _ocr.SetImage(m); _ocr.Recognize(); var text1 = _ocr.GetBoxText(); var text2 = _ocr.GetCharacters(); var text3 = _ocr.GetHOCRText(); //var text4 = _ocr.GetOsdText(1); var text5 = _ocr.GetTSVText(); var text6 = _ocr.GetUNLVText(); var text7 = _ocr.GetUTF8Text(); Plate.Text = text7; }
static void Main() { //using (Mat image = CvInvoke.Imread("../../characters/higher-res.jpg")) //{ // var scaledImage = new Mat(); // CvInvoke.Resize(image, scaledImage, Size.Empty, 1.5, 1.5); // DetectLinesInImage(scaledImage); //} //using (Mat toolbarObject = CvInvoke.Imread("../../../SURF_Resources/SURF_Toolbar_Mask.png", ImreadModes.Grayscale)) //using (Mat wordbrainObject = CvInvoke.Imread("../../../SURF_Resources/SURF_Wordbrain_Mask.png", ImreadModes.Grayscale)) //using (Mat scene = CvInvoke.Imread("../../../characters/Screenshot_20180530-100638_WordBrain.jpg", ImreadModes.Grayscale)) //{ // CompareImages(scene, toolbarObject, wordbrainObject); // //DetectKeyPoints(scene); //} Console.WriteLine("Starting image recognition"); Task.Factory.StartNew(() => { using (Image <Gray, byte> image = new Image <Gray, byte>(Path.GetFullPath("../../../characters/result.png"))) { using (Tesseract tesseractOcrProvider = new Tesseract("C:\\Program Files\\Tesseract-OCR\\tessdata", "eng", OcrEngineMode.TesseractLstmCombined)) { tesseractOcrProvider.SetVariable("segment_reward_chartype", "0.9"); tesseractOcrProvider.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); tesseractOcrProvider.SetImage(image); tesseractOcrProvider.Recognize(); Tesseract.Character[] characters = tesseractOcrProvider.GetCharacters(); string text = tesseractOcrProvider.GetBoxText(); Console.WriteLine(text); } } }).Wait(); Console.WriteLine("Called async image recognition"); }