Vision „ az Apple számítógépes látás keretrendszere, amelyet először az iOS 11-ben mutattak be 2017-ben. A Vision kész algoritmusokat kínál arcok detektálásához, szövegfelismeréshez (OCR), vonalkódok észleléséhez, objektumok követéséhez, képek osztályozásához és kontúrok elemzéséhez „ minden az eszközön történik a Neural Engine segítségével. Az Apple WWDC 2023 adatai szerint a Vision a szabványos „Fotók" alkalmazásban arcfelismerésre, a „Kamera" alkalmazásban pedig valós idejű szövegfelismerésre használatos iPhone-on és iPad-en.
Főbb pontok
Vision „ egy magas szintű számítógépes látás keretrendszer, amely elvonatkoztatja a komplex gépi tanulási algoritmusokat egy egyszerű kérés API (VNRequest) mögé. A fejlesztőnek nem kell ismernie a konvolúciós neurális hálózatokat „ elég létrehozni egy megfelelő típusú kérést, átadni a képet és megkapni az eredményt.
A Vision architektúrája a Request → Handler → Result elvre épül: a VNImageRequestHandler fogadja a képet, végrehajtja a VNRequest-et, és visszaad egy VNObservation tömböt eredményekkel. Ez lehetővé teszi több kérés kombinálását egy képhez „ például egyszerre arcok és szöveg detektálása egy fényképen.
A Vision támogatja az iOS 11+ és macOS 10.13+ rendszereket. A Neural Engine-en keresztüli hardveres gyorsításhoz A12 Bionic vagy újabb chip szükséges. Az A17 Pro és M sorozatú eszközökön a Vision akár 60 képkockát is feldolgoz másodpercenként streaming videóhoz.
Fő előnye a Vision-nak „ teljes adatvédelem: minden számítás az eszközön történik, a képek nem kerülnek a szerverre. Ez lehetővé teszi a keretrendszer használatát érzékeny adatokkal dolgozó alkalmazásokban, például egészségügyi vagy banki alkalmazásokban.
VNDetectFaceRectanglesRequest „ a Vision alapszintű kérése arcok észlelésére egy képen. Visszaadja az egyes arcokat határoló téglalapok koordinátáit, a konkrét személy azonosítása nélkül.
Részletesebb elemzéshez használja a VNDetectFaceLandmarksRequest-et, amely meghatározza az arc kulcspontjait: szemek, szemöldök, orr, száj, állkapocs kontúr. Ezeket az adatokat maszkok alkalmazásához, emoji animációkhoz és szűrőkhöz használják valós időben (mint a FaceTime és Snapchat esetében).
import Vision
import UIKit
guard let image = UIImage(named: "photo") else { return }
let request = VNDetectFaceRectanglesRequest()
let handler = VNImageRequestHandler(cgImage: image.cgImage!, options: [:])
try handler.perform([request])
for observation in request.results ?? [] {
let bbox = observation.boundingBox
print("Face at x=\\(bbox.origin.x), y=\\(bbox.origin.y)")
}
VNFaceObservation nemcsak a boundingBox-ot, hanem a confidence-t (megbízhatóság 0-tól 1-ig) és a landmarks-ot is tartalmazza „ az arc pontjainak tömbjét, ha a kérés VNDetectFaceLandmarksRequest volt. A 0.5 alatti confidence általában hamis találatot jelent „ az ilyen eredmények elutasítása javasolt.
A Vision támogatja továbbá a VNDetectFaceCaptureQualityRequest-et, amely értékeli az arc képminőségét: megvilágítás, élesség, elforgatási szög. Ez hasznos a legjobb képkocka kiválasztásához felhasználói regisztrációnál vagy avatar létrehozásánál.
VNRecognizeTextRequest „ az Apple beépített OCR motorja, amelyet iOS 13-ban mutattak be. Felismeri a nyomtatott szöveget képeken 13 nyelv támogatásával: angol, orosz, kínai, japán, koreai, olasz, német, spanyol, portugál, francia, arab, vietnami és thai.
VNRecognizeTextRequest két pontossági szintet támogat: .fast (gyors, egyszerű szöveghez kontrasztos háttéren) és .accurate (pontos, összetett jelenetekhez különböző betűtípusokkal és szögekkel). A .fast 3–5-ször gyorsabb, de rosszabbul bánik a kézírással és nem szabványos betűtípusokkal.
import Vision
let textRequest = VNRecognizeTextRequest { request, _ in
guard let observations = request.results as? [VNRecognizedTextObservation]
else { return }
for observation in observations {
let topCandidate = observation.topCandidates(1).first
print(topCandidate?.string ?? "")
}
}
textRequest.recognitionLevel = .accurate
textRequest.usesLanguageCorrection = true
A usesLanguageCorrection tulajdonság bekapcsolja a felismert szöveg korrekcióját egy nyelvi modell segítségével. Ez 10–15%-kal növeli a pontosságot angol nyelv esetén, de meghosszabbítja a feldolgozási időt. Orosz nyelv esetén a korrekció szintén elérhető, ha a megfelelő felismerés meg van adva.
Az Apple ML Research 2022 adatai szerint a VNRecognizeTextRequest pontossága .accurate szinten 96% a tiszta dokumentumfotóknál angol nyelven és körülbelül 88% orosz nyelven. Csomagolásokon, táblákon és képernyőkön lévő szövegnél a pontosság 75–85%-ra csökken.
| Recognition Level | Sebesség | Pontosság (angol) | Orosz támogatás |
|---|---|---|---|
| .fast | 0.1–0.3 mp | ~85% | Igen |
| .accurate | 0.3–1.0 mp | ~96% | Igen |
VNDetectBarcodesRequest „ a Vision kérése vonalkódok és QR-kódok észlelésére és dekódolására egy képen. Az összes fő formátum támogatott: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec és QR.
Az AVFoundation-től (AVCaptureMetadataOutput) eltérően a Vision nemcsak videófolyammal, hanem statikus képekkel is működik „ ez lehetővé teszi kódok szkennelését már elkészített fényképekről vagy képernyőképekről. A Vision meghatározza a kód boundingBox-át pixelpontossággal, ami kényelmes a megtalált kód körüli keret animálásához.
import Vision
let barcodeRequest = VNDetectBarcodesRequest { request, _ in
guard let observations = request.results as? [VNBarcodeObservation]
else { return }
for observation in observations {
let payload = observation.payloadStringValue ?? ""
print("Barcode: \\(payload), Symbology: \\(observation.symbology.rawValue)"
}
}
VNBarcodeObservation tartalmazza a payloadStringValue-t (dekódolt tartalom), a symbology-t (kód típusa) és a confidence-t. QR-kódok esetén a payload lehet URL, szöveg vagy JSON. EAN/UPC esetén a termék numerikus kódja kerül visszaadásra, amely felhasználható a termék adatbázisban való kereséséhez.
A Vision több vonalkódot is feldolgozhat egyetlen képen „ az observations tömb minden megtalált kódhoz egy objektumot tartalmaz. Ez hasznos termékcsomagok vagy több vonalkóddal rendelkező dokumentumok szkenneléséhez.
VNDetectObjectAtPointRequest és VNSequenceRequestHandler „ a Vision eszközei objektumok követésére videófolyamban. Az első a felhasználó érintési pontja alapján határozza meg az objektumot, a második az objektumot követi a videóképkockák között.
VNSequenceRequestHandler képek sorozatát (videóképkockákat) fogadja, és minden képkockához visszaadja a követett objektum frissített pozícióját. Ezt kiterjesztett valóság alkalmazásokban, videószerkesztőkben és videó megfigyelő rendszerekben használják.
import Vision
let trackingRequest = VNTrackObjectRequest(detectedObjectObservation: initialObservation)
let sequenceHandler = VNSequenceRequestHandler()
for frame in videoFrames {
try sequenceHandler.perform([trackingRequest],
on: frame.cgImage!)
let newBBox = trackingRequest.results?.first?.boundingBox
// Objektum pozíciójának frissítése a képernyőn
}
VNTrackObjectRequest optikai áramláson alapuló követési algoritmust használ „ nem tanítja újra a detektort minden képkockán, hanem kiszámítja az objektum elmozdulását az előző pozícióhoz képest. Ez lehetővé teszi a valós idejű működést még Neural Engine nélküli eszközökön is.
Korlátozás: a követés elveszítheti az objektumot gyors mozgás, takarás vagy hirtelen fényváltozás esetén. Az Apple azt javasolja, hogy a detektálást (VNDetectObjectAtPointRequest) 10–15 képkockánként indítsa újra a követés korrekciójához.
VNClassifyImageRequest „ a Vision beépített modellje képek osztályozására 1000 kategóriában (ResNet-50 modell, ImageNet-en tanítva). A kérés visszaad egy VNClassificationObservation tömböt a kategória nevével és a megbízhatósággal.
VNDetectContoursRequest a kép kontúrelemzését végzi „ kivonja az objektumok határait, ami hasznos szegmentáláshoz, kontúrozáshoz és előfeldolgozáshoz a felismerés előtt. A kérés visszaad egy pontokból álló tömböt, amely leírja az egyes kontúrokat a képen.
import Vision
// Kép osztályozás
let classificationRequest = VNClassifyImageRequest { request, _ in
guard let results = request.results as? [VNClassificationObservation]
else { return }
let topMatch = results.prefix(3).filter { $0.confidence > 0.3 }
for match in topMatch {
print("\\(match.identifier): \\(match.confidence)"
}
}
VNClassifyImageRequest jól működik általános kategóriákra (macska, kutya, autó, étel), de nem alkalmas specifikus objektumokra „ ezekhez egyedi Core ML modellt kell tanítani és VNCoreMLRequest-et használni. Az Apple modellje mobil eszközökre optimalizált, és mindössze 5 MB helyet foglal.
VNDetectContoursRequest a kontúrokat pontok tömbjeként adja vissza a kontúr típusának megjelölésével (külső, belső, lyuk). Ezt a kérést képek OCR előtti előfeldolgozásához (szöveg kontrasztjának javítása), effektek rajzolásához (objektumok körvonalazása) és alakzatok elemzéséhez használják.
| Vision kérés | Rendeltetés | iOS verzió |
|---|---|---|
| VNDetectFaceRectanglesRequest | Arcok keresése a képen | iOS 11 |
| VNRecognizeTextRequest | Szövegfelismerés (OCR) | iOS 13 |
| VNDetectBarcodesRequest | Vonalkód és QR detektálás | iOS 11 |
| VNClassifyImageRequest | Képek osztályozása | iOS 13 |
| VNDetectContoursRequest | Kontúrelemzés | iOS 14 |
| VNTrackObjectRequest | Objektumok követése | iOS 11 |
Gyakran Ismételt Kérdések
Vision kész algoritmusokat biztosít (arcfelismerés, OCR, vonalkódok) modell tanítása nélkül. A Core ML „ egy motor egyedi modellek végrehajtásához. A Vision + VNCoreMLRequest lehetővé teszi a Core ML modellek futtatását a Vision pipeline-ban, egyesítve mindkét világ legjobbját: a Vision kész detektorai + a Core ML egyedi osztályozása.
Igen, a Vision támogatja a videófolyam valós idejű feldolgozását a VNSequenceRequestHandler-en keresztül követéshez és az AVCaptureVideoDataOutput-on keresztül képkockánkénti feldolgozáshoz. A12+ és Neural Engine eszközökön a Vision akár 60 képkockát is feldolgoz másodpercenként arcfelismeréshez. Nehéz feladatoknál (OCR, osztályozás) javasolt minden 5–10. képkocka feldolgozása.
VNRecognizeTextRequest 13 nyelvet támogat: angol, orosz, kínai (egyszerűsített és hagyományos), japán, koreai, olasz, német, spanyol, portugál, francia, arab, vietnami és thai. Több nyelv felismeréséhez egy képen adjon meg egy tömböt a recognitionLanguages tulajdonságban.
Igen, a VNCoreMLRequest-en keresztül. Létrehoz egy Core ML modellt, amely VNCoreMLModel-be van csomagolva, és átadja a VNCoreMLRequest-nek. A Vision automatikusan kezeli a kép előfeldolgozását (méretezés, vágás), és továbbítja a Core ML modellnek. Az eredmény VNCoreMLFeatureValueObservation-ként kerül visszaadásra a modell kimeneti adataival.
Nem, a Vision teljes mértékben az eszközön végzi az elemzést. A képek nem hagyják el a felhasználó eszközét. Ez az Apple alapvető architektúrája: minden ML keretrendszer (Vision, NaturalLanguage, Core ML, Speech) on-device működik az adatvédelem biztosítása érdekében. Semmilyen adat nem kerül az Apple szervereire.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is