/// <summary> /// Refreshes tesseract data gui /// </summary> private void SetTesseractDataDirty() { if(Directory.Exists(m_TessdataDirectory)) { string[] trainedDataFiles = Directory.GetFiles(m_TessdataDirectory, "*.traineddata", SearchOption.TopDirectoryOnly); string streamingAssetsPath = Path.Combine(Application.dataPath, TESSDATA_STREAMING_PATH); string[] tessdataFiles = Directory.GetFiles(streamingAssetsPath, "*.traineddata", SearchOption.TopDirectoryOnly); int trainedDataLen = trainedDataFiles.Length; m_TessdataList = new TessDataInfo[trainedDataLen]; for(int i = 0; i < trainedDataLen; i++) { FileInfo fileInfo = new FileInfo(trainedDataFiles[i]); m_TessdataList[i] = new TessDataInfo() { selected = Array.Exists<string>(tessdataFiles, a => a.Contains(Path.GetFileName(trainedDataFiles[i]))), name = Path.GetFileName(trainedDataFiles[i]), path = trainedDataFiles[i], fileSize = fileInfo.Length, fileSizeString = TesseractOCRUtility.FormatBytes(fileInfo.Length) }; } } m_TotalTessdataSize = GetTotalTessdataSize(); m_TotalSelectedTessdata = Array.FindAll<TessDataInfo>(m_TessdataList, a => a.selected).Length; }
/// <summary> /// Sets the image to be used /// </summary> /// <param name="imageData">Image data buffer</param> /// <param name="width">Image Width</param> /// <param name="height">Image Height</param> public void SetImage(byte[] imageData, int width, int height) { Debug.Assert(m_Handle != IntPtr.Zero, "Handle must not be nulled!"); if(m_Handle != IntPtr.Zero) { Color32[] colorBuffer = TesseractOCRUtility.ImageFlipVertical(imageData, width, height); imageData = TesseractOCRUtility.Color32ToBytes(colorBuffer); TesseractOCRBridge.SetImageData(m_Handle, imageData, width, height, BYTES_PER_PIXEL, BYTES_PER_PIXEL * width); } }
/// <summary> /// Converts image to text /// </summary> public void ConvertImageToText() { m_SnapshotTexture = new Texture2D(m_WebCamTexture.width, m_WebCamTexture.height, TextureFormat.RGB24, false); Color32[] colorBuffer = TesseractOCRUtility.ImageRotateClockwise(m_WebCamTexture.GetPixels32(), m_WebCamTexture.width, m_WebCamTexture.height); m_SnapshotTexture.Resize(m_WebCamTexture.height, m_WebCamTexture.width); m_SnapshotTexture.SetPixels32(colorBuffer); m_SnapshotTexture.Apply(); m_Ocr.SetImage(m_SnapshotTexture); m_InputField.text = m_Ocr.GetText(); }
/// <summary> /// Draws tess data gui /// </summary> private void DrawTessdataGUI() { EditorGUILayout.BeginVertical(); EditorGUILayout.LabelField("Tessdata Settings", EditorStyles.boldLabel); EditorGUILayout.BeginVertical("box"); EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel("Tessdata Directory"); m_TessdataDirectory = EditorGUILayout.TextField(m_TessdataDirectory); if(GUILayout.Button("...")) { m_TessdataDirectory = EditorUtility.OpenFolderPanel("Select Tessdata Directory", Path.Combine(Directory.GetCurrentDirectory(), ".."), ""); SetTesseractDataDirty(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Please select trained data to import."); GUILayout.FlexibleSpace(); EditorGUI.BeginChangeCheck(); EditorGUILayout.BeginHorizontal(GUILayout.Width(60.0f)); EditorGUILayout.LabelField("Select All", GUILayout.Width(60.0f)); m_IsAllDataSelected = EditorGUILayout.Toggle(m_IsAllDataSelected, GUILayout.Width(20.0f)); EditorGUILayout.EndHorizontal(); if(EditorGUI.EndChangeCheck()) { AssetDatabase.StartAssetEditing(); for(int i = 0; i < m_TessdataList.Length; i++) { m_TessdataList[i].selected = m_IsAllDataSelected; if(m_IsAllDataSelected) { ImportTessdata(m_TessdataList[i].path); EditorUtility.DisplayProgressBar("Importing All Tessdata", string.Format("Importing {0} ({1}/{2})", m_TessdataList[i].name, i, m_TessdataList.Length), (float)i / (float)m_TessdataList.Length); } else { RemoveTessdata(m_TessdataList[i].path); EditorUtility.DisplayProgressBar("Removing All Tessdata", string.Format("Removing {0} ({1}/{2})", m_TessdataList[i].name, i, m_TessdataList.Length), (float)i / (float)m_TessdataList.Length); } } AssetDatabase.StopAssetEditing(); AssetDatabase.Refresh(); m_TotalTessdataSize = GetTotalTessdataSize(); m_TotalSelectedTessdata = GetSelectedTessdata().Length; } EditorGUILayout.EndHorizontal(); if(m_TessdataList.Length > 0) { EditorGUILayout.BeginVertical("Box"); m_TessdataListScrollView = EditorGUILayout.BeginScrollView(m_TessdataListScrollView, GUILayout.Height(200.0f)); for(int i = 0; i < m_TessdataList.Length; i++) { EditorGUI.BeginChangeCheck(); EditorGUILayout.BeginHorizontal(); m_TessdataList[i].selected = EditorGUILayout.ToggleLeft(m_TessdataList[i].name + " - " + m_TessdataList[i].fileSizeString, m_TessdataList[i].selected); EditorGUILayout.EndHorizontal(); if(EditorGUI.EndChangeCheck()) { if(m_TessdataList[i].selected) { ImportTessdata(m_TessdataList[i].path); } else { RemoveTessdata(m_TessdataList[i].path); } AssetDatabase.Refresh(); m_TotalTessdataSize = GetTotalTessdataSize(); m_TotalSelectedTessdata = GetSelectedTessdata().Length; } } EditorUtility.ClearProgressBar(); EditorGUILayout.EndScrollView(); EditorGUILayout.EndVertical(); EditorGUILayout.LabelField("Selected Count: " + m_TotalSelectedTessdata); EditorGUILayout.LabelField("Total Tessdata Size: " + TesseractOCRUtility.FormatBytes(m_TotalTessdataSize)); } else { EditorGUILayout.HelpBox("Unable to find tessdata from the directory. \nThe project will not work properly.", MessageType.Error, true); EditorGUILayout.LabelField("Please visit Tessdata Github and clone your desired repository."); if(GUILayout.Button("Tessdata Github")) { Help.BrowseURL("https://github.com/tesseract-ocr?q=tessdata"); } } EditorGUILayout.EndVertical(); EditorGUILayout.EndVertical(); }