<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: OpenCV определение лица]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=14477&amp;type=atom" />
	<updated>2021-11-06T19:08:20Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=14477</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: OpenCV определение лица]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=150513#p150513" />
			<content type="html"><![CDATA[<p>Да, не. Там всё несложно.<br /><a href="http://forum.script-coding.com/viewtopic.php?id=16712">http://forum.script-coding.com/viewtopic.php?id=16712</a></p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2021-11-06T19:08:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=150513#p150513</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: OpenCV определение лица]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=150511#p150511" />
			<content type="html"><![CDATA[<p>Вау! Пробовал что-то?<br />UPD: Рано обрадовался, думал, это новая нативная фича у них появилась, а так только с AutoIt можно использовать, перевести всё это проблематично.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2021-11-06T18:43:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=150511#p150511</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: OpenCV определение лица]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=150510#p150510" />
			<content type="html"><![CDATA[<p>OpenCV v4 COM:<br /><a href="https://www.autoitscript.com/forum/topic/206432-opencv-v4-udf">https://www.autoitscript.com/forum/topi … ncv-v4-udf</a></p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2021-11-06T17:35:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=150510#p150510</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: OpenCV определение лица]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=144877#p144877" />
			<content type="html"><![CDATA[<p><strong>Malcev</strong>&nbsp; Вы истинный волшебник, спасибо, что Вы есть!</p>]]></content>
			<author>
				<name><![CDATA[pixel75]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41268</uri>
			</author>
			<updated>2021-01-16T11:53:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=144877#p144877</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: OpenCV определение лица]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=144868#p144868" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>file1 := &quot;1.jpg&quot;
file2 := &quot;2.jpg&quot;

;start dll opencv
Global opencv := { opencv_core: &quot;opencv_core2413.dll&quot;
, opencv_highgui: &quot;opencv_highgui2413.dll&quot;
, opencv_imgproc: &quot;opencv_imgproc2413.dll&quot; }
_OpenCV_Startup()

;// load IPL type image both images must have same number of bits and color channels!
pimg := _cvLoadImage(file1)
ptemp := _cvLoadImage(file2) ;image to look for

;// Determine images height and width to create results matrix
_cvGetSize(pimg, width, height)
_cvGetSize(ptemp, width2, height2)
rw :=  width - width2 + 1
rh :=  height - height2 + 1

;// Create Opencv matrix object 32 bit floating
presult := _cvCreateMat(rh, rw, CV_32FC1 := 5)

;// Template matching
_cvMatchTemplate(pimg, ptemp, presult, CV_TM_CCOEFF_NORMED := 5)
_cvNormalize(presult, presult, 0, CV_C := 1, CV_MINMAX := 32, 0)
_cvThreshold(presult, presult, thresh := 0.9, maxval := 1, CV_THRESH_BINARY := 0)

;//locate matches
;// Create minmax variables to pass to opencv
VarSetCapacity(pmaxloc, 8, 0)
VarSetCapacity(pminloc, 8, 0)
VarSetCapacity(pmaxval, 8, 0)
VarSetCapacity(pminval, 8, 0)

;// Find location of maximum
_cvMinMaxLoc(presult, &amp;pminval, &amp;pmaxval, &amp;pminloc, &amp;pmaxloc, pmask)

msgbox % NumGet(pmaxloc, 0, &quot;int&quot;) &quot;`n&quot; NumGet(pmaxloc, 4, &quot;int&quot;)
_cvReleaseMat(presult)
_cvReleaseImage(ptemp)
_cvReleaseImage(pimg)
_Opencv_CloseDLL()
ExitApp</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2021-01-16T10:30:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=144868#p144868</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: OpenCV определение лица]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=144864#p144864" />
			<content type="html"><![CDATA[<p>Слепил из любезно предоставленного кода выше, функцию, в которую мне удобно передавать начальную точку поиска фрагмента, его ширину и высоту, коэффициент совпадения, и два имени файла - шаблон и искомое. <br /></p><div class="codebox"><pre><code>
	poisk_image(x, y, w, h, coef_sovp, f1, f2)
	{
		file1 := f1
		file2 := f2
		window := &quot;gui&quot;	
		_OpenCV_Startup()		
		pimg := _cvLoadImage(file1)		; базовый скриншот
		ptemp := _cvLoadImage(file2) 		; искомое изображение			
		_cvNamedWindow(window)
		_cvShowImage(window, pimg)
		_cvGetSize(pimg, width, height)
		_cvGetSize(ptemp, width2, height2)
		rw :=  width - width2 + 1
		rh :=  height - height2 + 1
		presult := _cvCreateMat(rh, rw, CV_32FC1 := 5)
		_cvMatchTemplate(pimg, ptemp, presult, CV_TM_CCOEFF_NORMED := 5)		
		_cvNormalize(presult, presult, 0, CV_C := 1, CV_MINMAX := 32, 0)
		_cvThreshold(presult, presult, coef_sovp, maxval := 1, CV_THRESH_BINARY := 0)
		VarSetCapacity(pmaxloc, 8, 0)
		VarSetCapacity(pminloc, 8, 0)
		VarSetCapacity(pmaxval, 8, 0)
		VarSetCapacity(pminval, 8, 0)
		pmask := _cvCreateImage(_cvSize(rw, rh), IPL_DEPTH_8U := 8, channels := 1)		
		_cvSet(pmask, _cvScalar(vScalar, 1))
		; Найти местоположение максимума
		_cvMinMaxLoc(presult, &amp;pminval, &amp;pmaxval, &amp;pminloc, &amp;pmaxloc, pmask)	

		loop
		{	; все, найденные со схожестью thresh := 0.94, подобия на базовом изображении 
			; обрамляется красной рамкой, если найдены
			_cvRectangle(pmask, _cvPoint(NumGet(pmaxloc, 0, &quot;int&quot;)-5, NumGet(pmaxloc, 4, &quot;int&quot;)-5), _cvPoint(NumGet(pmaxloc, 0, &quot;int&quot;)+ width2, NumGet(pmaxloc, 4, &quot;int&quot;)+height2), _cvScalar(vScalar, 0), -1, 8, 0)
			_cvRectangle(pimg, _cvPoint(NumGet(pmaxloc, 0, &quot;int&quot;)-5, NumGet(pmaxloc, 4, &quot;int&quot;)-5), _cvPoint(NumGet(pmaxloc, 0, &quot;int&quot;)+ width2+10, NumGet(pmaxloc, 4, &quot;int&quot;)+height2+10), _CV_RGB(vScalar, 255, 0, 0), 2, 8, 0)
			; вывод обновлённого базового изображения
			_cvShowImage(window, pimg)
			; найти местоположение максимума			
			_cvMinMaxLoc(presult, &amp;pminval, &amp;pmaxval, &amp;pminloc, &amp;pmaxloc, pmask)
			; где &amp;pminval - указатель на возвращаемое минимальное значение
			; &amp;pmaxval - указатель на возвращаемое максимальное значение
			; &amp;pminloc - указатель на возвращаемое минимальное местоположение
			; &amp;pmaxloc - указатель на максимальное возвращаемое местоположение
			; pmask - необязательная маска, которая используется для выбора подмассива			
			if (NumGet(pmaxval, 0, &quot;double&quot;) &lt; 0.99)
				break
			Sleep 100
		}
		Return
	}

	poisk_image(1645, 204, 120, 250, 0.94, f1 := &quot;1.jpg&quot;, f2 := &quot;2.jpg&quot;)

	Msgbox done
	_cvReleaseImage(pmask)
	_cvReleaseMat(presult)
	_cvReleaseImage(ptemp)
	_cvReleaseImage(pimg)
	_cvDestroyAllWindows()
	_Opencv_CloseDLL()
</code></pre></div><p>Прошу о помощи по пунктам: <br />1. Откуда теперь собственно можно вычленить готовую точку координат найденного искомого, чтобы я потом мог кликать на найденный фрагмент или принимать решение в зависимости от того, нашелся фрагмент или нет в заданном коэффициенте совпадения?<br />2. Как убрать отображение окон базового скриншота, результата поиска, прорисовку чертовых рамок ,которые мне не нужны, не сломав при этом функционал?<br />Мне НЕ нужно: перебирать всё множество, выводить окно, обрамлять найденное. Мне нужно искать только ОДНО совпадение и просто вывести в Tooltip итоговые координаты или высоту c шириной, поделив которые пополам, я нашел бы центр искомого с тем, чтобы кликнуть туда, например. Другими словами, я просто хочу замену стандартному ImageSearch но в новом костюмчике с большими карманами, чтобы не закапываться в python, а оставаться преданным autohotkey, в рамках привычного понимания, которого и без пайтона ничтожно мало)</p>]]></content>
			<author>
				<name><![CDATA[pixel75]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41268</uri>
			</author>
			<updated>2021-01-16T10:02:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=144864#p144864</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: OpenCV определение лица]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=144804#p144804" />
			<content type="html"><![CDATA[<p>Спасибо Вам, дорогие товарищи большущее! С меня кружка пива в жаркий день!</p>]]></content>
			<author>
				<name><![CDATA[pixel75]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41268</uri>
			</author>
			<updated>2021-01-15T10:52:32Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=144804#p144804</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: OpenCV определение лица]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=144803#p144803" />
			<content type="html"><![CDATA[<p>Лучше так:<br /><a href="https://stackoverflow.com/questions/14148758/how-to-capture-the-desktop-in-opencv-ie-turn-a-bitmap-into-a-mat/14167433#14167433">https://stackoverflow.com/questions/141 … 3#14167433</a></p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2021-01-15T10:44:10Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=144803#p144803</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: OpenCV определение лица]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=144802#p144802" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>pixel75 пишет:</cite><blockquote><p>как же, либо заставить снимать скриншот в .jpg</p></blockquote></div><p>Замените в первой строчке bmp на jpg.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2021-01-15T10:40:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=144802#p144802</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: OpenCV определение лица]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=144800#p144800" />
			<content type="html"><![CDATA[<p>Приведенный выше скрипт достоит аплодисментов автору, ибо оный выше всяких похвал обрабатывает .jpg-изображения! Но у меня стоит задача работать с .bmp-изображениями, потому как у меня программно делается скриншот экрана в области координат с помощью вот такого фокуса:<br /></p><div class="codebox"><pre><code>
	file = C:\Users\DonGustavo\Desktop\Open\baza.bmp
	screen(x,y,w,h, OutputFilePath, hwnd=&quot;&quot;) 
	{
		hwnd := (hwnd=&quot;&quot;) ? WinExist(&quot;A&quot;) : hwnd 										
		pBitmap := Gdip_BitmapFromScreen(0,raster)
		if (pBitmap &lt; 1)
		pToken := Gdip_StartUp(), pBitmap := Gdip_BitmapFromScreen(0,raster)
		pBitmap2 := Gdip_CreateBitmap(w, h)
		G2 := Gdip_GraphicsFromImage(pBitmap2), Gdip_SetSmoothingMode(G2, 4), Gdip_SetInterpolationMode(G2, 7)
		Gdip_DrawImage(G2, pBitmap, 0, 0, w, h, x, y, w, h)
		Gdip_SaveBitmapToFile(pBitmap2, OutputFilePath)
		Gdip_DeleteGraphics(G2), Gdip_DisposeImage(pBitmap), Gdip_DisposeImage(pBitmap2)
		if (pToken != &quot;&quot;)
		Gdip_ShutDown(pToken)
	}	

	screen(1059, 348, 220, 325, file, NoxPlayer) 
</code></pre></div><p>чтобы потом полученный скриншот скормить нейросети в качестве базового шаблона, чтобы на нём уже искать нужный мне элемент. Да, и кусок делающий bmp-скриншот и собственно код здешний по работе с OpenCV, заимствованы у не таких скудоумных, как я, и вероятно мсье знает толк в извращениях, если попытается конвертировать затем bmp в jpg, что безусловно отнимает время и потому&nbsp; оперативности не добавляет. Потому не лучше ли спросить людей уважаемых, как же, либо заставить снимать скриншот в .jpg, либо понять, можно ли скармливать .bmp, либо же совсем не скриншотить ничего, а как то искать в динамичном окне игры( например!) элемент с помощью локализованной Malcev OpenCV&nbsp; на подобие того, как находилось бы искомое на потоковом видео?&nbsp; Прошу не троллинга и&nbsp; попыток петросянить, но прошу совета.</p>]]></content>
			<author>
				<name><![CDATA[pixel75]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41268</uri>
			</author>
			<updated>2021-01-15T09:38:32Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=144800#p144800</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: OpenCV определение лица]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=144738#p144738" />
			<content type="html"><![CDATA[<p>Ребятушки, вы такие молодцы! Спасибо вам огромное за ваш&nbsp; труд! Предлагаю канонизировать Malcev! )</p>]]></content>
			<author>
				<name><![CDATA[pixel75]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41268</uri>
			</author>
			<updated>2021-01-14T11:43:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=144738#p144738</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: OpenCV определение лица]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142427#p142427" />
			<content type="html"><![CDATA[<p>Я не помогал, да и Blackholyman тоже.<br />Просто автор при создании класса пользовался мною перенесенными функциями с автоит.<br />Его скрипт определяет туловище с помощью haarcascade_fullbody.xml.<br />Подробнее читайте в справке по опенсиви.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2020-10-02T21:46:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142427#p142427</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: OpenCV определение лица]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142425#p142425" />
			<content type="html"><![CDATA[<p><strong>Malcev</strong> Вроде вы помогали в работе этого скрипта <a href="https://github.com/manciuszz/AHK-OpenCV">https://github.com/manciuszz/AHK-OpenCV</a> вместе с &quot;Blackholyman&quot;, можете объяснить что он делает и как работает ?</p>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2020-10-02T21:26:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142425#p142425</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: OpenCV определение лица]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=131598#p131598" />
			<content type="html"><![CDATA[<p>Да, я спрашивал касается ли это только х64. Так понимаю это касается и х32.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2019-01-25T11:16:15Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=131598#p131598</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: OpenCV определение лица]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=131597#p131597" />
			<content type="html"><![CDATA[<p>Не совсем понял вопроса, но:<br /></p><div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Элементы структуры выравниваются по &quot;границе типа&quot;. Каждый элемент должен располагаться либо в начале структуры, либо по смещению от начала структуры, кратному его размеру. Если имеем структуру {char, short}, то второй элемент не может быть впритык к первому, т.к. имеет размер 2 байта и, значит, должен быть, как минимум, на смещении 2. Т.е. после char делается отступ в 1 байт, чтобы выравнять short.</p><p>Кроме того, размер структуры должен быть кратным самому большому её элементу. В структуре {short, char} к концу нужно добавить 1 байт, чтобы размер был не 3, а 4 байта, кратно short.</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2019-01-25T11:13:18Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=131597#p131597</id>
		</entry>
</feed>
