Здравствуйте, дорогие друзья.
Помогите мне, с распознаванием числа.
Имеется скрипт распознавания числа.
Работает из консоли. Нужно активировать скрипт по F5, затем открыть файл file.bmp - средством просмотра фотографий Windows - и скрипт определит число.
Но число это - должно быть идеально черно-белым и идеально четким.
Как распознать число - если оно немного размыто и на небелом фоне ?
Ссылка на скрипт http://dropmefiles.com/4zuai
Помогите мне, с распознаванием числа.
Имеется скрипт распознавания числа.
Работает из консоли. Нужно активировать скрипт по 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