
Amióta megkezdődött a Mesterséges Intelligencia fellendülése - vagy az iPhone X reklám, amely az arc feloldó funkciót tartalmazta a TV képernyőket - kipróbáltam ezt a technológiát. Miután azonban elkezdtem guglizni róla, általában csak a Pythonban találtam kód példákat. És hét évig Java-rajongó lévén, ezt látva demotiváltam. Ezért végül úgy döntöttem, hogy erre nyílt forráskódú Java könyvtárakra vadászok.
Jelenleg különféle Java könyvtárak vannak. De a legnépszerűbb, amit találtam, az OpenCV volt.
Az OpenCV egy nyílt forráskódú számítógépes látáskönyvtár, amely rengeteg modullal rendelkezik, például tárgyfelismerés, arcfelismerés és kibővített valóság. Bár ez a könyvtár C ++ nyelven íródott, csatában tesztelt Java-összerendeléseket is kínál.
Van azonban egy kérdés. Szoftverkiadásának részeként csak néhány modult kínál (Java kötéssel) a dobozból - és az arcfelismerés nem tartozik ezek közé. Ezért a használatához manuálisan kell elkészítenie.
Várjon! Mit? Miért?
Igen - az OpenCV közösség által említett ok az, hogy a modulok nem teljesen stabilak. Ezért nem tartoznak a standard kiadáshoz. Ezért itt külön tárolóban tartják fenn őket.
Ha nincs vagy nagyon kevés C ++ tapasztalata van (például nekem), akkor már biztosan elkezdett szédülni, hogy maga épít fel egy C ++ könyvtárat. De ne aggódj, azért vagyok itt, hogy megfogjam a kezed és végigvezesselek ezen az unalmas folyamaton. Tehát kezdjük, igaz?
Az OpenCV for Java építése a semmiből

Különböző forrásokat találhat az ehhez hasonló lépésről lépésre. Azonban egyikük sem működött tökéletesen nekem, mivel hiányzott egyik vagy másik dolog. A legközelebb találtam, ami segített nekem, ez az. Arra azonban nem kell hivatkozni. Kövesse az alábbi lépéseket, és jó lesz.
Először is, rendelkeznie kell az alábbi szoftverrel a számítógépén. Itt a könyvtár 64 bites változatát építem, mivel egy 64 bites számítógépem van. De meg lehet építeni 32 bitesre is.
A szükséges szoftver:
- Cmake (3.6.0 rc-4 verziót használtam).
- Hangya (belső használatra a JAR építéséhez)
- MinGW - W64 GCC-8.1.0
- 64 bites JDK 1.8
Egy szó a MinGW-ről: A könyvtár felépítéséhez C ++ fordítókra van szükségünk. Használhatja a Visual Studio eszközöket (VS), amelyek sokkal jobbak. Ehhez azonban nem volt luxusom, mivel az irodai laptopomra építettem, és a VS licencelt szoftver, amely itt a Java emberek számára nem érhető el. Ezért nyílt forráskódú eszközöket kellett használnom, és a legjobb a MinGW (Minimalist GNU for Windows).
Ezenkívül nagyon fontos a MinGW helyes verziójának használata. Töltse le az x86_64-posix-seh verziót, mivel ebben a verzióban van szál támogatás. Nem próbáltam ki az összes többi verziót. De az x86_64-win32-sjlj verzió egyáltalán nem működik.
További perspektíva érdekében a felépítést a make nevű segédprogram végzi, amely a MinGW részeként jön létre (bin / mingw32-make.exe). A make egy olyan feladatfutó a C ++ számára, mint az „Ant” a Java. De a C ++ kód és a szkriptek nagyon platformfüggőek. Ezért az elosztók platformfüggetlenné tételéhez a CMake segédprogramot használják. A CMake platformfüggő gyártási szkripteket generál.
Építési konfigurációk generálása a CMake segítségével
1. lépés: Töltse le mind az opencv, mind az opencv_contrib forráskódját, és bontsa ki őket egy könyvtárba. Ezután hozzon létre egy „build” nevű mappát ugyanabban a könyvtárban (én létrehoztam a „build_posix” nevet, ahogyan a képernyőképeken látható).
2. lépés: Nyissa meg a CMake alkalmazást. Vigye a „hol a forráskód” pontot az opencv kibontott mappájába. Mutasson továbbá arra, hogy „hová építse a bináris fájlokat” a létrehozott „build” mappába.

3. lépés: Adja hozzá a 64 bites JDK 1.8 bin mappát, a MinGW bin mappát és az Ant bin mappát a „PATH” környezeti változókhoz. Ez fontos, mivel a CMake a környezeti változókban keresi a konfigurációt. Ha ez nem történik meg, akkor az 5. lépésben manuálisan kell konfigurálnunk a CMake alkalmazást.
Abban az esetben, ha több JDK van a rendszerben, és már van néhány különböző JDK a „PATH” -ban, és nem szeretné hozzáadni a JDK 1.8-at a „PATH” -hoz, ezt kihagyhatja. De kézzel állítsa be az 5. lépésben.
4. lépés: Nyomja meg a „Konfigurálás” gombot, és válassza a „MinGw Makefiles” és a „Befejezés” lehetőséget. Ezt követően a CMake megkezdi a projekt konfigurálását. Ez eltart egy ideig, és a konfigurálás befejezése után megmutatja az aktuálisan elérhető konfigurációkat.
Abban az esetben, ha arra kíváncsi, hogy az Ön számára létrehozott konfigurációk helyesek-e, hivatkozhat a számomra itt létrehozott naplókra és összehasonlíthatja azokat.

5. lépés: Most következik a legfontosabb rész - a konfigurációk megváltoztatása. Először kattintson a „Csoportosított” és „Speciális” jelölőnégyzetekre a konfigurációk rendezéséhez.

- Ellenőrizze, hogy az ANT_EXECUTABLE (a keresőmezőben keresse meg az „ANT_EXECUTABLE” szót) és mind az öt „JAVA” konfiguráció a 64 bites JDK 1.8-ra mutat. Ha a 3. lépést megfelelően hajtották végre, akkor ez helyes lesz. Ellenkező esetben javítsa ki őket.

- Törölje a (z) „BUILD” és az „INSTALL” csoportban a Python (keresés: „Python”) kapcsolódó jelölőnégyzetek bejelölését, mivel nincs szükségünk Python buildekre.

- Tiltsa le a „WITH_MSMF” és a „WITH_IPP & WITH_TBB” elemeket. Ezek a libek csak a VS-hez érhetők el.
- Szerkessze az „OPENCV_EXTRA_MODULES_PATH” elemet az „OPENCV” csoport alatt, és állítsa a „modulok” mappába a korábban kinyert „opencv_contrib” forrásmappában.

Ezt követően nyomja meg ismét a „Konfigurálás” gombot. Ez elvégzi a végső konfigurációkat. Itt hivatkozhat a számomra létrehozott naplókra.
Megjegyzés : Győződjön meg arról, hogy összehasonlítja a „Konfigurálás” naplókat, amelyeket generáltam a fentiekben megosztottakkal. Ha valami jelentős különbséget talál , akkor először próbálja meg kijavítani a konfigurációkat, majd nyomja meg újra a „Konfigurálás” gombot. Ellenkező esetben fennáll annak az esélye, hogy az összeállítása meghiúsul, és hogy nehezebb lesz a hibakeresés.
6. lépés: Ezt követően nyomja meg a „Generálás” gombot. Néhány másodpercbe telik, majd bezárja a CMake alkalmazást.
OpenCV fordítása
Ha most a fenti összes konfiguráció helyes, akkor ez a feladat szellő lesz (2-3 óra!). Csak nyissa meg a parancssort, menjen a „build” mappába, és hajtsa végre az alábbi parancsot.
mingw32-make.exe -j5 > buildLogs.txt
Itt -j5
adjuk hozzá, amely utasítja a make segédprogramot, hogy öt feladatot futtasson párhuzamosan. Ez gyorsabbá teszi az építést, legalábbis elméletileg.
Ne felejtsük el, hogy a naplókat egy szöveges fájlba helyezzük. Ezek túl nagyok lehetnek, ebben az esetben a parancssorablak csonkíthatja. Szüksége van rájuk, ha az összeállítás nem sikerül. Itt hivatkozhat az esetemben létrehozott összeállítási naplókra.
Megjegyzés : Lehet, hogy a napló utasítások sorrendje nem azonos az Ön számára, mivel az összeállítás öt párhuzamos szálban történik.
Miután az építkezés véget ért, ellenőrizheti a „bin” és a „lib” mappákat a „build” könyvtárban. A „bin” -en belül minden opencv * .exe és libopencv * .dll fájlja, valamint az összeállított JAR megtalálható. Ezenkívül a „lib” megkapja a fő dll-t (libopencv_javaxxx.dll) és néhány további függő fájlt.


Kezek az OpenCV arcfelismerő API-val

Most, hogy megépítette a könyvtárat, először be kell állítania a környezeti változókat, valamint a felhasználói könyvtárat az Eclipse programban.
- Hozzon létre egy változót OPENCV_JAVA_BIN, és mutasson rá a „bin” mappára, amely a „build” könyvtárban van létrehozva.
- Hozzon létre egy OPENCV_JAVA_LIB fájlt, és mutasson rá a „lib” mappára, amely a „build” könyvtárban található.
- Csatolja mindkét fenti változót a „PATH” változóhoz.
- Nyissa meg Eclipse-jét, és hozzon létre egy új felhasználói könyvtárat, amelyet az arcfelismerési projektjéhez fog használni. Menj a „Window”> „Preferenc es ”. A menüben navigáljon a „Java”> „Építési útvonal”> „Felhasználói könyvtárak” alatt, és válassza az „Új…” lehetőséget. Írja be a könyvtár nevét - például opencv -, és válassza ki az újonnan létrehozott felhasználói könyvtárat. Válassza a „Külső JAR hozzáadása…” lehetőséget, és böngészéssel válassza ki a számítógépén az „opencv-3xx.jar” lehetőséget.
Ezek után nincs szükség a natív könyvtár összekapcsolására, mivel ezt a 3. lépésben hozzáadták az „path” változókhoz.
Miután végzett ezzel a beállítással, innen klónozhatja a Git-adattáramat, és importálhatja a projektet az Eclipse munkaterületére. Ezenkívül hozzá kell adnia a JDK 1.8-at, valamint a fent létrehozott opencv felhasználói könyvtárat ehhez a projekthez. Miután végzett, készen áll az újonnan épített OpenCV könyvtár tesztelésére.
Jelen írásban három program van ebben a projektben.
- HelloWorld : ezt futtathatja annak tesztelésére, hogy az OpenCV könyvtár beállítása rendben van-e. Ha ez nem működik megfelelően, akkor ezt először ki kell rendeznie . Az egyetlen kérdés, amellyel most találkozni fog, a rendszer környezeti változókkal vagy a felhasználói könyvtár beállításával kapcsolatos.
- FaceDetection : ezzel tesztelheti az arcfelismerő modult. Ez egy másik modul, mint az arcfelismerés. Ez egy modul, amelyet az OpenCV szabványos kiadásával együtt szállítanak. Az írástól kezdve képet nyújthatunk a program bemeneteként, és ez felismeri a képen belüli összes arcot. A kimeneti kép zöld téglalapokat rajzol az összes észlelt arcra.


- FaceRecognition: az OpenCV facerec modul három algoritmust tartalmaz:
- Saját arcok
- Fisherfaces
- Helyi bináris minták hisztogramjai.
Ezen algoritmusok technikai részleteiért olvassa el ezt a hivatalos cikket. Bemutató célokból megmutatom, hogyan kell használni az Eigenfaces algoritmust.
Először le kell töltenie az edzés adatait az arc adatbázisból. Ez az adat tíz különböző képet tartalmaz mind a 40 különböző témáról (400 kép). Néhány alany esetében a képeket különböző időpontokban készítették, változtatva a megvilágítást, az arckifejezéseket (nyitott / csukott szemek, mosolygós / nem mosolygós) és az arc részleteit (szemüveg / szemüveg nélkül). Miután kibontotta őket a számítógépére, elő kell készítenie egy .csv fájlt, amely tartalmazza az egyes képek elérési útját és a hozzájuk tartozó címkét.
Ennek megkönnyítése érdekében van egy TrainingData.txt fájl a Git-tárban. Meg kell azonban szerkesztenie a fájlt, és módosítania kell a képek útvonalát a számítógép könyvtárának helye szerint.
Megjegyzés : a letöltött arcadatbázis .pgm formátumú képeket tartalmaz. Ezt a formátumot a Windows nem támogatja . Ahhoz, hogy ténylegesen konvertáljam őket .jpg-be, felvettem a PGMToJPGConverter programot a táromba. Ehhez felhasználhatja a képek konvertálását és az edzésadatok tényleges megtekintését.
Ezek után futtathatja az arcfelismerő programot. Az alábbiakban bemutatjuk a programban végrehajtott lépéseket:
- Az OpenCV könyvtár a szokásos módon van betöltve.
- A .csv fájl beolvasásra kerül, és két ArrayList jön létre. Az egyik a képek mátrixához, a másik pedig a megfelelő címkékhez.
- A 400 bemeneti kép közül a lista adatstruktúrájának utolsó bejegyzését eltávolítja és elmenti a betanított modell későbbi teszteléséhez.
- Ezt követően a fennmaradó 399 képet felhasználják az Eigenfaces algoritmus betanítására.
- A képzés befejezése után a modellt arra kérjük, hogy jósolja meg a kép címkéjét, amelyet a 3. lépésben eltávolítottunk.

Itt megfigyelhetjük, hogy az algoritmus képes megjósolni tesztalanyunk címkéjét 1807-es konfidenciaértékkel. Minél alacsonyabb az érték, annál jobb a jóslat. Ehhez hasonlóan ezt a gyakorlatot két másik algoritmussal is elvégezheti. A C ++ kód innen és innen letölthető.
Frissítés (2018. december 27.) : Ha az openCV java kötések felépítését fájdalmasnak találja, akkor van egy jó hírem az Ön számára. Nemrégiben találtam egy egyszerűbb módszert a java összes openCV-függőségének megszerzésére. A részletekért olvassa el egy másik cikkemet.Gratulálok !! ? A végére értél. És ha tetszett? Ez a cikk, nyomja meg az alábbi tapsoló gombot? Nagyon sokat jelent számomra, és segít másoknak is meglátni a történetet.