Что нового

Поиск цифр на картинке

adiv18

Новичок
Сообщения
5
Репутация
0
Добрый день.
Подскажите пожалуйста каким способом можно найти цифры на картинке(jpg), вырезать эту область картинки и сохранить в отдельный файл ?
буду рад любому похожему примеру.
Спасибо.
 

Webarion

Осваивающий
Сообщения
143
Репутация
24
Добрый день.
Подскажите пожалуйста каким способом можно найти цифры на картинке(jpg), вырезать эту область картинки и сохранить в отдельный файл ?
буду рад любому похожему примеру.
Спасибо.
С примерами здесь не просто. Здесь проще с советами. Из того, что я понимаю в этой теме, вариантов парочка:
  1. Если на картинке, определённый шрифт, с определённым размером и с минимальным количеством помех, и вы знаете об этом, то алгоритм возможно создать. Правда придётся затратить на это достаточно ментальных усилий. Это старый вариант, возможно даже не рентабельный.
  2. Использовать нейросеть. Тут либо ищите кто знает и готов делиться (это будет дороже), либо изучайте сами (это будет дешевле, но ценнее для вашего личного опыта)
 
Последнее редактирование:

Norm

Продвинутый
Сообщения
278
Репутация
74
Ещё как вариант, использовать стороннюю программу управляемую с помощью Autoit
 

Webarion

Осваивающий
Сообщения
143
Репутация
24
Ещё как вариант, использовать стороннюю программу управляемую с помощью Autoit
Ну, это само собой скорее всего. Потому-что самому писать, задача только для энтузиастов.
А как вариант, вот ссылка по нейросети, уж цифры то она уже хорошо научилась определять)):
Введение в машинное зрение или работа с нейросетями для самых маленьких
Сам не проверял. Надобности не было.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Тоже сам не проверял, но... вдруг поможет
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
HotKeySet('1', 'fu1')
HotKeySet('^1', 'ex')
While 1
	Sleep(100)
WEnd
Func fu1()
	Local $x = 255, $y = 206
	Local $aArr[100], $zz = 0, $xt, $yt
	$pi = PixelSearch($x, $y, $x, $y + 300, 0xFFFFFF)
	If @error Then Return 111
	$er = 0
	For $i = 0 To 99
		$er = 0
		If ($y + 16 + 15 * $i) > $pi[1] + 13 Then ExitLoop
		PixelSearch($x + 101, $y + 11 + 15 * $i, $x + 101, $y + 11 + 15 * $i, 0xFFFFFF)
		If Not @error Then $er += 1
		PixelSearch($x + 101, $y + 12 + 15 * $i, $x + 101, $y + 12 + 15 * $i, 0xFFFFFF)
		If Not @error Then $er += 1
		PixelSearch($x + 101, $y + 14 + 15 * $i, $x + 101, $y + 14 + 15 * $i, 0xFFFFFF)
		If Not @error Then $er += 1
		If $er = 3 Then ContinueLoop
		ConsoleWrite('@@@@@@@@@@@@' & @LF)
		$app = PixelSearch($x + 191, $y + 17 + 15 * $i, $x + 400, $y + 17 + 15 * $i, 0xFFFFFF);запятая
		If Not @error Then ConsoleWrite('app ' & $app[0] - 102 & ',' & $app[1] - 6 & @LF)
		$depos = PixelSearch($app[0] - 85, $app[1], $app[0] - 175, $app[1], 0xFFFFFF); deposit p понизу
		Select
			Case Not @error
				$xt = $depos[0] + 78
				$yt = $depos[1] - 6
			Case @error
				$tmp1 = PixelSearch($app[0] - 102, $app[1] - 6, $app[0] - 125, $app[1] - 6, 0xFFFFFF); transfered
				If @error Then ContinueLoop ;
				ConsoleWrite('$tmp1 ' & $tmp1[0] & ',' & $tmp1[1] & @LF)
				PixelSearch($tmp1[0] + 6, $tmp1[1], $tmp1[0] + 6, $tmp1[1], 0xFFFFFF); transfered To
				If Not @error Then $xt = $tmp1[0] + 29
				If Not @error Then $yt = $tmp1[1]
				PixelSearch($tmp1[0] - 6, $tmp1[1], $tmp1[0] - 6, $tmp1[1], 0xFFFFFF);transfereD to
				If Not @error Then $xt = $tmp1[0] + 23
				If Not @error Then $yt = $tmp1[1]
				PixelSearch($tmp1[0] - 1, $tmp1[1], $tmp1[0] - 1, $tmp1[1], 0xFFFFFF);transFered to
				If Not @error Then $xt = $tmp1[0] + 51
				If Not @error Then $yt = $tmp1[1]
		EndSelect
		Select
			Case $xt
				$os1 = osr($xt, $yt)
				$os2 = osr(@extended + 40, $yt)
				$aArr[$zz] = $os1
				$aArr[$zz + 1] = $os2
				$zz += 2
		EndSelect
		$xt = 0
	Next
EndFunc   ;==>fu1
Func osr($x = 205, $y = 168)
	Local $str
	$Timer = TimerInit()
	While TimerDiff($Timer) < 1000
		PixelSearch($x + 1, $y, $x + 1, $y + 5, 0xFFFFFF)
		Select
			Case @error
;~ 				ConsoleWrite('$x+1' & @LF)
				PixelSearch($x + 2, $y, $x + 2, $y + 5, 0xFFFFFF)
				Select
					Case @error
;~ 						ConsoleWrite('$x+2' & @LF)
						PixelSearch($x + 3, $y, $x + 3, $y + 5, 0xFFFFFF)
						Select
							Case @error
;~ 	 								ConsoleWrite(@LF& @LF & @LF & @LF & @LF & @LF & @LF & @LF&  $str& @LF)
								ConsoleWrite($str & @LF)
								Return SetError(0, $x, $str)
						EndSelect
					Case Else
						$x += 1
;~ 						ConsoleWrite('$x+' &$x& @LF)
				EndSelect
		EndSelect
		$di = dig($x, $y)
		$x += @error
		Select
			Case @extended = 12
			Case @extended = 11
				$str &= '.'
			Case Else
				$str &= @extended
		EndSelect
;~ 		ConsoleWrite($di & @LF)
;~ 		ConsoleWrite('x '&$x & @LF)
		Sleep(40)
	WEnd
	If TimerDiff($Timer) > 1000 Then ConsoleWrite('tim' & @LF)
EndFunc   ;==>osr
Func dig($ix = 150, $iy = 175)
	PixelSearch($ix + 2, $iy, $ix + 2, $iy, 0xFFFFFF)
	Select;1
		Case Not @error
			PixelSearch($ix + 2, $iy + 1, $ix + 2, $iy + 1, 0xFFFFFF)
			Select
				Case Not @error
					PixelSearch($ix + 2, $iy + 5, $ix + 2, $iy + 5, 0xFFFFFF)
					Select
						Case Not @error
							Return SetError(4, 1, 0)
					EndSelect
			EndSelect
	EndSelect
	PixelSearch($ix + 1, $iy, $ix + 1, $iy, 0xFFFFFF)
	Select;2
		Case Not @error
			PixelSearch($ix + 1, $iy + 4, $ix + 1, $iy + 4, 0xFFFFFF)
			Select
				Case Not @error
					PixelSearch($ix + 5, $iy + 5, $ix + 5, $iy + 5, 0xFFFFFF)
					Select
						Case Not @error
							Return SetError(6, 2, 0)
					EndSelect
			EndSelect
	EndSelect
	PixelSearch($ix + 4, $iy + 3, $ix + 4, $iy + 3, 0xFFFFFF)
	Select;3
		Case Not @error
			PixelSearch($ix + 5, $iy + 3, $ix + 5, $iy + 3, 0xFFFFFF)
			Select
				Case @error
					PixelSearch($ix + 1, $iy + 1, $ix + 1, $iy + 1, 0xFFFFFF)
					Select
						Case @error
							PixelSearch($ix + 1, $iy + 4, $ix + 1, $iy + 4, 0xFFFFFF)
							Select
								Case @error
									PixelSearch($ix + 2, $iy + 3, $ix + 2, $iy + 3, 0xFFFFFF)
									Select
										Case Not @error
											Return SetError(6, 3, 0)
									EndSelect
							EndSelect
					EndSelect
			EndSelect
	EndSelect
	PixelSearch($ix + 1, $iy + 3, $ix + 1, $iy + 3, 0xFFFFFF)
	Select;4
		Case Not @error
			PixelSearch($ix + 2, $iy + 2, $ix + 2, $iy + 2, 0xFFFFFF)
			Select
				Case Not @error
					PixelSearch($ix + 3, $iy + 1, $ix + 3, $iy + 1, 0xFFFFFF)
					Select
						Case Not @error
							Return SetError(7, 4, 0)
					EndSelect
			EndSelect
	EndSelect
	PixelSearch($ix + 1, $iy, $ix + 1, $iy, 0xFFFFFF)
	Select;5
		Case Not @error
			PixelSearch($ix + 5, $iy, $ix + 5, $iy, 0xFFFFFF)
			Select
				Case Not @error
					PixelSearch($ix + 1, $iy + 1, $ix + 1, $iy + 1, 0xFFFFFF)
					Select
						Case Not @error
							Return SetError(6, 5, 0)
					EndSelect
			EndSelect
	EndSelect
	PixelSearch($ix + 1, $iy + 1, $ix + 1, $iy + 1, 0xFFFFFF)
	Select;6
		Case Not @error
			PixelSearch($ix + 5, $iy + 1, $ix + 5, $iy + 1, 0xFFFFFF)
			Select
				Case @error
					PixelSearch($ix + 1, $iy + 4, $ix + 1, $iy + 4, 0xFFFFFF)
					Select
						Case Not @error
							Return SetError(6, 6, 0)
					EndSelect
			EndSelect
	EndSelect
	PixelSearch($ix + 1, $iy, $ix + 1, $iy, 0xFFFFFF)
	Select;7
		Case Not @error
			PixelSearch($ix + 3, $iy + 3, $ix + 3, $iy + 3, 0xFFFFFF)
			Select
				Case Not @error
					PixelSearch($ix + 4, $iy + 2, $ix + 4, $iy + 2, 0xFFFFFF)
					Select
						Case Not @error
							Return SetError(6, 7, 0)
					EndSelect
			EndSelect
	EndSelect
	PixelSearch($ix + 1, $iy + 1, $ix + 1, $iy + 1, 0xFFFFFF)
	Select;8
		Case Not @error
			PixelSearch($ix + 1, $iy + 4, $ix + 1, $iy + 4, 0xFFFFFF)
			Select
				Case Not @error
					PixelSearch($ix + 5, $iy + 1, $ix + 5, $iy + 1, 0xFFFFFF)
					Select
						Case Not @error
							PixelSearch($ix + 5, $iy + 4, $ix + 5, $iy + 4, 0xFFFFFF)
							Select
								Case Not @error
									PixelSearch($ix + 2, $iy + 2, $ix + 2, $iy + 2, 0xFFFFFF)
									Select
										Case Not @error
											Return SetError(6, 8, 0)
									EndSelect
							EndSelect
					EndSelect
			EndSelect
	EndSelect
	PixelSearch($ix + 1, $iy + 1, $ix + 1, $iy + 1, 0xFFFFFF)
	Select;9
		Case Not @error
			PixelSearch($ix + 1, $iy + 4, $ix + 1, $iy + 4, 0xFFFFFF)
			Select
				Case @error
					PixelSearch($ix + 5, $iy + 4, $ix + 5, $iy + 4, 0xFFFFFF)
					Select
						Case Not @error
							PixelSearch($ix + 5, $iy + 1, $ix + 5, $iy + 1, 0xFFFFFF)
							Select
								Case Not @error
									Return SetError(6, 9, 0)
							EndSelect
					EndSelect
			EndSelect
	EndSelect
	PixelSearch($ix + 1, $iy + 1, $ix + 1, $iy + 1, 0xFFFFFF)
	Select;0
		Case Not @error
			PixelSearch($ix + 1, $iy + 4, $ix + 1, $iy + 4, 0xFFFFFF)
			Select
				Case Not @error
					PixelSearch($ix + 5, $iy + 1, $ix + 5, $iy + 1, 0xFFFFFF)
					Select
						Case Not @error
							PixelSearch($ix + 5, $iy + 4, $ix + 5, $iy + 4, 0xFFFFFF)
							Select
								Case Not @error
									PixelSearch($ix + 2, $iy + 2, $ix + 2, $iy + 2, 0xFFFFFF)
									Select
										Case @error
											PixelSearch($ix + 2, $iy + 3, $ix + 2, $iy + 3, 0xFFFFFF)
											Select
												Case @error
													Return SetError(6, 0, 0)
											EndSelect
									EndSelect
							EndSelect
					EndSelect
			EndSelect
	EndSelect
	PixelSearch($ix + 2, $iy + 6, $ix + 2, $iy + 6, 0xFFFFFF)
	Select; ,
		Case Not @error
			Return SetError(3, 12, 0)
	EndSelect
	PixelSearch($ix, $iy, $ix + 1, $iy + 4, 0xFFFFFF)
	Select; .
		Case @error
			PixelSearch($ix + 2, $iy, $ix + 3, $iy + 4, 0xFFFFFF)
			Select
				Case @error
					PixelSearch($ix + 1, $iy, $ix + 1, $iy + 5, 0xFFFFFF)
					Select
						Case Not @error
							PixelSearch($ix + 2, $iy, $ix + 2, $iy + 5, 0xFFFFFF)
							Select
								Case Not @error
									Return SetError(3, 11, 0)
							EndSelect
					EndSelect
			EndSelect
	EndSelect

	Return -1
EndFunc   ;==>dig
Func ex()
	Exit
EndFunc   ;==>ex

Вот картина, вот определение с неё цифирь. В fu1 $x = 255, $y = 206 это координаты левого нижнего синего пикселя где Date, их нужно определить руками.
 

Вложения

  • 212.PNG
    212.PNG
    80 КБ · Просмотры: 75
Автор
A

adiv18

Новичок
Сообщения
5
Репутация
0
Спасибо за информацию, по распознаванию понял куда копать, буду разбираться.
Можете еще помочь по второй части задачи - "вырезать область картинки и сохранить в отдельный файл". Тут уже с участием пользователя, процесс будет примерно такой - открыть картинку в GUI, пользователь выделяет нужную область мышкой (как пример, выделение в любом графическом редакторе) и сохраняет эту выделенную область в файл. Не знаю пока как организовать выделение области с сохранение. Любой пример реализации очень бы помог,
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
как организовать выделение области
 

Norm

Продвинутый
Сообщения
278
Репутация
74
Правильнее было бы не отвечать на благодарность вообще, чем лайки попрошайничать.
Вы вот зашли, и не разобравшись, сразу "шашкой начали махать". На эмоциях даже дизлайк поставили.:biggrin:
Где Вы увидели, что я тут или гдето ещё что-то выпрашиваю.
Я вообще не за себя говорил. В теме моей помощи как таковой нету.
Именно об этом я adiv18 и сказал, что вместо того что бы тему этим безполезным Спасибо поднимать, лучше просто правильно поблагодарить, тех кто помогал. Ну или подробнее написать чей код помог или оказался более эфективнее.
Пройдите по ссылке и нажмёте [Подтвердить], потом посмотрите, кого Вы поблагодарили.
И если посмотрите, то увидите, что adiv18 после этого действительно поблагодарил каждого, кто помог.
В чём я не прав?, и почему Вы так реагируете. :acute:
 
Последнее редактирование:

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Вы вот зашли, и не разобравшись, сразу "шашкой начали махать". На эмоциях даже дизлайк поставили.:biggrin:
Где Вы увидели, что я тут или гдето ещё что-то выпрашиваю.
Я вообще не за себя говорил. В теме моей помощи как таковой нету.
Именно об этом я adiv18 и сказал, что вместо того что бы тему этим безполезным Спасибо поднимать, лучше просто правильно поблагодарить, тех кто помогал. Ну или подробнее написать чей код помог или оказался более эфективнее.
Пройдите по ссылке и нажмёте [Подтвердить], потом посмотрите, кого Вы поблагодарили.
И если посмотрите, то увидите, что adiv18 после этого действительно поблагодарил каждого, кто помог.
В чём я не прав?, и почему Вы так реагируете. :acute:
Как я и написал выше, не надо попрошайничать лайки. Для себя или для кого-то другого - совершенно без разницы. Данные сообщения не несут никакой смысловой нагрузки. Это лишь выклянчивание увеличения бессмысленных ничего не значащих цифр. За сим прошу прекратить флуд.
 
  • Angry
Реакции: Norm
Верх