Kezdőoldal » Számítástechnika » Programozás » Hogyan működnek a gépfelismerő...

Hogyan működnek a gépfelismerő algoritmusok?

Figyelt kérdés
Póker lapokat szeretnék felismerni screenshotokról. Arra gondoltam az összes pixelt színkódját megvizsgálnám és a kapott számokat összehasonlítanám. Pontosan nem tudom hogyan működik a színkódok összehasonlítása és hogy mennyire pontos, van valakinek erről valami ismerete? Googleben se nagyon találtam erről semmit. Python -os vagy C# -os megoldás kéne.

2016. febr. 11. 13:55
1 2
 1/16 anonim ***** válasza:

Ez így nem lesz jó.

MI-t kell írni rá, amely tanul és annak alapján azonosít.

Ha már mindenképpen így szeretnéd, akkor sem kell az összes pixelt vizsgálni, csak annak meghatározott hányadát. Ez a hányad attól függ milyen a vizsgálandó, de hogy max. a nyolcada, tizenhatoda, vagy inkább csak 128-ada a pixeleknek, az biztos, de legalábbis, több mint valószinű. Egy mátrix segít neked.

2016. febr. 11. 14:11
Hasznos számodra ez a válasz?
 2/16 anonim ***** válasza:
A színek összehasonlítása meg jobbára RGB szinhármas alapján megy. Egy pixel (3 x 8 (RGB)) 24 bit.
2016. febr. 11. 14:13
Hasznos számodra ez a válasz?
 3/16 A kérdező kommentje:
Egy MI hogyan működik, gondolom kell neki mondjuk 1000 minta ami alapján már meg fogja tudni mondani melyik lap melyik? Megtanulja. Ilyet még sosem csináltam, hol lehetne erről olvasni?
2016. febr. 11. 14:14
 4/16 anonim ***** válasza:
0%

Megvalósítás-függő. Lehet úgy is, ahogy te írod.

Ezt a kártyalap felismerést elég egyszerű megoldani. Kevés azonosítási pont szükséges.

Ha rákeresel (Artificial Intelligence), fogsz kapni találatot. Valószinűleg magyar nyelven is.

2016. febr. 11. 14:42
Hasznos számodra ez a válasz?
 5/16 anonim ***** válasza:
Nem kell ide semmiféle mesterséges intelligencia, erre jó a képfeldolgozás. Nem ismerem a követelményeket (számítógép által generált kép? Valós kép? Megvilágítási viszonyok és kameraszög? Van mozgás információ?), de leszeded Python-hoz az OpenCV-t és azzal egészen biztosan megoldható. Kontúrkeresés/éldetektálás, binarizálás, transzformációk, maszkolás, hibaszámítás, stbstb, de legrosszabb esetben is saját osztályozó kaszkád készítésével. Ennél sokkal komplexebb problémák is megoldhatóak azért vele, főleg az iparban. Ha belinkelsz példákat akkor talán valaki tud segíteni konkrétabban is.
2016. febr. 11. 16:05
Hasznos számodra ez a válasz?
 6/16 anonim ***** válasza:
0%

"Nem kell ide semmiféle mesterséges intelligencia,"


"Kontúrkeresés/éldetektálás, binarizálás, transzformációk, maszkolás, hibaszámítás,"


Nem azért, de amiről te írsz, az is mesterséges intelligencia. Gondoltam, tudatom veled. Csak az eleje még alacsony szintű képfeldolgozással is meg van terhelve. Erre neki semmi szüksége. A képfeldolgozás nála abban is kimerülhet, hogy redukálja a színmélységet és azután már csak egy mátrix-os megfeleltetés szükséges.

2016. febr. 11. 16:35
Hasznos számodra ez a válasz?
 7/16 anonim ***** válasza:
Amit te keresel, az a neurális háló.
2016. febr. 11. 16:50
Hasznos számodra ez a válasz?
 8/16 anonim ***** válasza:

Dehogy. A neurális háló az az MI egyik megvalósítása (a sok közül).

Én erre a problémára nem alkalmaznék neurális hálót, mert annak megvalósítása túl sokba kerülne a feladathoz képest.

Itt nem kell egyéb, mint a kitüntetett pontokat egyszer elődetektálni (mátrix), azokat bináris fában letárolni (52 db), és egy keresőrutint írni a megfeleltetésekhez, majd végiglépkedni a fán.

Ennyi a feladata. Persze előtte egy, vagy fél bájtosra redukálnám a 3 bájtos képet, hogy kisebb legyen a memófoglalás meg a prociterhelés.

2016. febr. 11. 17:01
Hasznos számodra ez a válasz?
 9/16 A kérdező kommentje:

Erről mi a vélemény? [link]


Eddig ez a legjobb amit találtam. OpenCV vel is probáltam méghozzá matchTemplate el. Van vele bajom. Ez a kodom a matchTemplate hez és működik is.


import cv2

import numpy as np

from matplotlib import pyplot as plt


img_rgb = cv2.imread('test.png')

img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)

template = cv2.imread('test_pattern.png',0)

w, h = template.shape[::-1]


res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)

threshold = 0.8

loc = np.where( res >= threshold)

print(res)

for pt in zip(*loc[::-1]):

cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (155,0,155), 2)


cv2.imwrite('res.png',img_rgb)


Ez előbbi módszert még elemzem.

2016. febr. 11. 17:13
 10/16 A kérdező kommentje:
Ilyen kártyákat próbálok felismertetni vele: [link]
2016. febr. 11. 17:20
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!