Что нового

Распознание текста c Teseract

Visors

Новичок
Сообщения
58
Репутация
0
Здравствуйте, дорогие друзья.
Помогите мне, с распознаванием числа.

Имеется скрипт распознавания числа.
Работает из консоли. Нужно активировать скрипт по F5, затем открыть файл file.bmp - средством просмотра фотографий Windows - и скрипт определит число.
Но число это - должно быть идеально черно-белым и идеально четким.

Как распознать число - если оно немного размыто и на небелом фоне ?
Код:
#include <ScreenCapture.au3>
#include <File.au3>

HotKeySet("{ESC}", "_Exit")
Local $h_TESSDll = DllOpen('libtesseract302.dll')
Local $h_LEPTDll = DllOpen('liblept168.dll')

Local $iTiger = True, $iExit = True
Local $sFileName = "capt.bmp"
Local $sTitleWin = "[REGEXPTITLE:Средство просмотра фотографий Windows]"

$hTess = _TessBaseAPICreate()
If Not @error Then
   _TessBaseAPIInit3($hTess, @ScriptDir &"\tessdata", "eng")
   If Not @error Then

	  While $iExit
		 If WinExists($sTitleWin) And $iTiger Then
			$iTiger = Not $iTiger
			$hWnd = WinActivate($sTitleWin)
			WinMove($hWnd, "", 0, 0, 200, 200)
			$aClient = WinGetClientSize($sTitleWin)
			WinMove($hWnd, "", (@DesktopWidth/2)-($aClient[0]/2), (@DesktopHeight/2)-($aClient[0]/2), 200, 200)
			Sleep(250)
			_ScreenCapture_CaptureWnd($sFileName, $hWnd, 10, 60, $aClient[0]-10, $aClient[1]-30, False)
			$hPix = _pixRead($sFileName)
			FileDelete($sFileName)
			If Not @error Then
			_TessBaseAPISetImage2($hTess, $hPix)
			$hText = _TessBaseAPIGetUTF8Text($hTess)
			   If Not @error Then
				  $pText = DllStructCreate("char text[64]", $hText)
				  MsgBox(0, "OCR Tessdata", StringFormat("Value: %s", $pText.text))
				  _TessDeleteText($hText)
			   EndIf
			EndIf
			_pixDestroy($hPix)
		 ElseIf Not WinExists($sTitleWin) And Not $iTiger Then
			$iTiger = True
		 EndIf
		 Sleep(30)
	  WEnd
   EndIf
EndIf

_TessBaseAPIEnd($hTess)

DllClose($h_TESSDll)
DllClose($h_LEPTDll)

Func _Exit()
   $iExit = False
EndFunc ;==>_Exit

Func _TessBaseAPICreate()

   $a_Ret = DllCall($h_TESSDll, 'ptr:cdecl', 'TessBaseAPICreate')
   If Not $a_Ret[0] Then
	  Return SetError(1, 0, 0)
   EndIf
   Return SetError(0, 0, $a_Ret[0])
EndFunc ;==>_TessBaseAPICreate

Func _TessBaseAPIEnd($h_Tess)
   DllCall($h_TESSDll, 'none:cdecl', 'TessBaseAPIEnd', 'ptr', $h_Tess)
EndFunc ;==>_TessBaseAPIEnd

Func _TessBaseAPIInit3($h_Tess, $s_DataPath, $s_Language)

   $a_Ret = DllCall($h_TESSDll, 'int:cdecl', 'TessBaseAPIInit3', 'ptr', $h_Tess, 'str', $s_DataPath, 'str', $s_Language)
   If $a_Ret[0] = -1 Then
	  Return SetError(1, 0, 0)
   EndIf
   Return SetError(0, 0, 1)
EndFunc ;==>_TessBaseAPIInit3

Func _TessBaseAPIGetUTF8Text($h_Tess)

   $a_Ret = DllCall($h_TESSDll, 'ptr:cdecl', 'TessBaseAPIGetUTF8Text', 'ptr', $h_Tess)
   If Not $a_Ret[0] Then
	  Return SetError(1, 0, 0)
   EndIf
   Return SetError(0, 0, $a_Ret[0])
EndFunc ;==>_TessBaseAPIGetUTF8Text

Func _TessDeleteText($s_Text)
   DllCall($h_TESSDll, 'none:cdecl', 'TessDeleteText', 'ptr', $s_Text)
EndFunc ;==>_TessDeleteText

Func _TessBaseAPISetImage2($h_Tess, $h_Pix)
   DllCall($h_TESSDll, 'none:cdecl', 'TessBaseAPISetImage2', 'ptr', $h_Tess, 'ptr', $h_Pix)
EndFunc ;==>_TessBaseAPISetImage2

Func _pixRead($s_FileName)

   $a_Ret = DllCall($h_LEPTDll, 'ptr:cdecl', 'pixRead', 'str', $s_FileName)
   If Not $a_Ret[0] Then
	  Return SetError(1, 0, 0)
   EndIf
   Return SetError(0, 0, $a_Ret[0])
EndFunc ;==>_pixRead

Func _pixDestroy($h_Pix)
   DllCall($h_LEPTDll, 'note:cdecl', 'pixDestroy', 'ptr', $h_Pix)
EndFunc ;==>_pixDestroy
Ссылка на скрипт http://dropmefiles.com/4zuai
 
Верх