Existe-t-il un moyen d'accomplir quelque chose de similaire à ce que font les applications iTunes et App Store lorsque vous échangez une carte-cadeau à l'aide de l'appareil photo de l'appareil, en reconnaissant une courte chaîne de caractères en temps réel au-dessus du flux de caméra en direct?
Je sais que dans iOS 7 il y a maintenant la classe AVMetadataMachineReadableCodeObject
qui, AFAIK, ne représente que les codes-barres. Je suis plus intéressé par la détection et la lecture du contenu d'une chaîne courte. Est-ce possible à l'aide de méthodes API accessibles au public ou d'un autre SDK tiers que vous connaissez peut-être?
Il y a aussi une vidéo du processus en action:
https://www.youtube.com/watch?v=c7swRRLlYEo
Meilleur,
Je travaille sur un projet qui fait quelque chose de similaire à Apple app store racheter avec appareil photo comme vous l'avez mentionné.
Un excellent point de départ pour le traitement de la vidéo en direct est n projet que j'ai trouvé sur GitHub . Cela utilise le framework AVFoundation et vous implémentez les méthodes AVCaptureVideoDataOutputSampleBufferDelegate.
Une fois que vous avez le flux d'images (vidéo), vous pouvez utiliser OpenCV pour traiter la vidéo. Vous devez déterminer la zone de l'image que vous souhaitez OCR avant de l'exécuter via Tesseract. Vous devez jouer avec le filtrage, mais les grandes étapes que vous prenez avec OpenCV sont:
Quelques autres conseils:
Ce fil de questions-réponses semble toujours être l'un des meilleurs résultats de recherche pour le sujet de l'OCR sur iOS, mais il est assez obsolète, j'ai donc pensé publier des ressources supplémentaires qui pourraient être utiles que j'ai trouvées à partir du moment d'écrire ce message:
Cadre de vision
https://developer.Apple.com/documentation/vision
À partir d'iOS 11, vous pouvez désormais utiliser le framework Vision basé sur CoreML inclus pour des choses comme la détection de rectangle ou de texte. J'ai constaté que je n'avais plus besoin d'utiliser OpenCV avec ces capacités incluses dans le système d'exploitation. Cependant, notez que la détection de texte n'est pas la même que la reconnaissance de texte ou OCR, vous aurez donc toujours besoin d'une autre bibliothèque comme Tesseract (ou peut-être votre propre modèle CoreML) pour traduire les parties détectées de l'image en texte réel.
SwiftOCR
https://github.com/garnele007/SwiftOCR
Si vous souhaitez simplement reconnaître les codes alphanumériques, cette bibliothèque OCR revendique des améliorations significatives en termes de vitesse, de consommation de mémoire et de précision par rapport à Tesseract (je ne l'ai pas essayé moi-même).
Kit ML
https://firebase.google.com/products/ml-kit/
Google a publié ML Kit dans le cadre de sa suite d'outils de développement Firebase, en version bêta au moment de la rédaction de cet article. Semblable au CoreML d'Apple, il s'agit d'un framework d'apprentissage machine qui peut utiliser vos propres modèles formés, mais qui possède également des modèles pré-formés pour les tâches de traitement d'image courantes comme Vision Framework. Contrairement à Vision Framework, celui-ci comprend également un modèle de texte sur l'appareil reconnaissance des caractères latins. Actuellement, l'utilisation de cette bibliothèque est gratuite pour la fonctionnalité sur l'appareil, avec des frais pour l'utilisation des offres cloud/API SAAS de Google. J'ai choisi d'utiliser cela dans mon projet, car la vitesse et la précision de la reconnaissance semblent assez bonnes, et je vais également créer une application Android avec les mêmes fonctionnalités, donc avoir une seule plateforme croisée la solution est idéale pour moi.
SDK de reconnaissance en temps réel ABBYY
https://rtrsdk.com/
Ce SDK commercial pour iOS et Android est téléchargeable gratuitement pour évaluation et utilisation commerciale limitée (jusqu'à 5000 unités au moment de la rédaction de cet article). Une utilisation commerciale supplémentaire nécessite un Licence étendue. Je n'ai pas évalué cette offre en raison de son prix opaque.
Il y a un projet similaire à celui sur github: https://github.com/Devxhkl/RealtimeOCR
Le "temps réel" n'est qu'un ensemble d'images. Vous n'avez même pas besoin de penser à tous les traiter, juste assez pour représenter largement le mouvement de l'appareil (ou le changement de position de la caméra). Il n'y a rien dans le SDK iOS pour faire ce que vous voulez, mais vous pouvez utiliser une bibliothèque OCR tierce (comme Tesseract) pour traiter les images que vous prenez de la caméra.
J'examinerais Tesseract . Il s'agit d'une bibliothèque OCR open source qui prend les données d'image et les traite. Vous pouvez ajouter différentes expressions régulières et ne rechercher que des caractères spécifiques. Ce n'est pas parfait, mais d'après mon expérience, cela fonctionne plutôt bien. Il peut également être installé en tant que CocoaPod si vous êtes dans ce genre de chose.
Si vous vouliez capturer cela en temps réel, vous pourriez être en mesure d'utiliser GPUImage pour capturer des images dans le flux en direct et effectuer un traitement sur les images entrantes pour accélérer Tesseract en utilisant différents filtres ou en réduisant la taille ou qualité des images entrantes.