Nous avons résumé comment reconnaître les caractères manuscrits à l'aide de la fonction de reconnaissance optique de caractères (OCR) qui peut être utilisée avec GCP (plateforme Google Cloud). Pour les débutants de GCP et ceux qui souhaitent utiliser GCP à partir de maintenant.
L'objectif est de reconnaître les caractères manuscrits de l'image à l'aide de la fonction OCR de GCP.
macOS Catalina 10.15.6 Python 3.8.1
--Avant de commencer
Pour utiliser chaque service GCP, vous devez créer un compte Google. Si vous ne possédez pas de compte Google, veuillez consulter ici pour créer un compte Google.
Après avoir créé un compte Google, accédez à la Console GCP et [ici](https://cloud.google.com/vision/docs/before-you- Veuillez vous reporter au début) pour définir le projet Cloud et les informations d'authentification.
Avant de commencer l'implémentation, préparez d'abord l'image manuscrite que vous souhaitez reconnaître. J'ai préparé une telle image.
[Tutoriel](https://cloud.google.com/vision/docs/handwriting?apix_params=%7B%22alt%22%3A%22json%22%2C%22%24.xgafv%22%3A%221%22 % 2C% 22prettyPrint% 22% 3Atrue% 2C% 22resource% 22% 3A% 7B% 7D% 7D # vision-document-text-detection-python) pour créer le code. Le code créé est le suivant. Le nom du fichier est detect.py.
import os
import io
from google.cloud import vision
def detect_document(path):
client = vision.ImageAnnotatorClient()
with io.open(path, 'rb') as image_file:
content = image_file.read()
image = vision.types.Image(content=content)
response = client.document_text_detection(image=image)
for page in response.full_text_annotation.pages:
for block in page.blocks:
print('\nBlock confidence: {}\n'.format(block.confidence))
for paragraph in block.paragraphs:
print('Paragraph confidence: {}'.format(
paragraph.confidence))
for word in paragraph.words:
word_text = ''.join([
symbol.text for symbol in word.symbols
])
print('Word text: {} (confidence: {})'.format(
word_text, word.confidence))
for symbol in word.symbols:
print('\tSymbol: {} (confidence: {})'.format(
symbol.text, symbol.confidence))
if response.error.message:
raise Exception(
'{}\nFor more info on error messages, check: '
'https://cloud.google.com/apis/design/errors'.format(
response.error.message))
if __name__ == "__main__":
path = 'sample.png'
detect_document(os.path.abspath(path))
La commande d'exécution est la suivante.
python3 detect.py
Block confidence: 0.8999999761581421
Paragraph confidence: 0.8999999761581421
Word text:je(confidence: 0.9800000190734863)
Symbol:je(confidence: 0.9800000190734863)
Word text:de(confidence: 0.9900000095367432)
Symbol:de(confidence: 0.9900000095367432)
Word text:Nom(confidence: 0.9300000071525574)
Symbol:Nom(confidence: 0.8600000143051147)
Symbol:Avant(confidence: 1.0)
Word text:Est(confidence: 0.9900000095367432)
Symbol:Est(confidence: 0.9900000095367432)
Word text: KOTARO (confidence: 0.8299999833106995)
Symbol: K (confidence: 0.4099999964237213)
Symbol: O (confidence: 0.8299999833106995)
Symbol: T (confidence: 0.8600000143051147)
Symbol: A (confidence: 0.9900000095367432)
Symbol: R (confidence: 0.9900000095367432)
Symbol: O (confidence: 0.949999988079071)
Word text:est(confidence: 0.9399999976158142)
Symbol:alors(confidence: 0.9399999976158142)
Symbol:Su(confidence: 0.949999988079071)
Word text: 。 (confidence: 0.9900000095367432)
Symbol: 。 (confidence: 0.9900000095367432)
Block confidence: 0.9200000166893005
Paragraph confidence: 0.9200000166893005
Word text:de(confidence: 0.9200000166893005)
Symbol:de(confidence: 0.9200000166893005)
Block confidence: 0.9300000071525574
Paragraph confidence: 0.9300000071525574
Word text: Python (confidence: 0.9700000286102295)
Symbol: P (confidence: 0.9800000190734863)
Symbol: y (confidence: 0.9800000190734863)
Symbol: t (confidence: 0.9100000262260437)
Symbol: h (confidence: 0.9900000095367432)
Symbol: o (confidence: 0.9900000095367432)
Symbol: n (confidence: 0.9900000095367432)
Word text:Mais(confidence: 0.9700000286102295)
Symbol:Mais(confidence: 0.9700000286102295)
Word text:Comme(confidence: 0.8999999761581421)
Symbol:Bien(confidence: 0.9399999976158142)
Symbol:Ki(confidence: 0.8600000143051147)
Word text:est(confidence: 0.8500000238418579)
Symbol:alors(confidence: 0.7799999713897705)
Symbol:Su(confidence: 0.9300000071525574)
Word text: 。 (confidence: 0.8799999952316284)
Symbol: 。 (confidence: 0.8799999952316284)
Block confidence: 0.949999988079071
Paragraph confidence: 0.949999988079071
Word text:Toutes les personnes(confidence: 0.9900000095367432)
Symbol:Seulement(confidence: 0.9900000095367432)
Symbol:Hmm(confidence: 1.0)
Symbol:Nana(confidence: 1.0)
Word text: 、 (confidence: 0.699999988079071)
Symbol: 、 (confidence: 0.699999988079071)
Word text:Suivre(confidence: 0.9300000071525574)
Symbol:Fu(confidence: 0.8899999856948853)
Symbol:Oh(confidence: 0.9200000166893005)
Symbol:B(confidence: 0.9399999976158142)
Symbol:-(confidence: 1.0)
Word text:Shi(confidence: 1.0)
Symbol:Shi(confidence: 1.0)
Word text:main(confidence: 1.0)
Symbol:main(confidence: 1.0)
Word text:Hey(confidence: 0.9900000095367432)
Symbol:Hey(confidence: 0.9900000095367432)
Word text: 。 (confidence: 0.9900000095367432)
Symbol: 。 (confidence: 0.9900000095367432)
python3 detect.py 0.82s user 0.42s system 2% cpu 57.861 total
La taille du fichier image était de 8,7 Mo et le temps d'exécution était de 0,82 s. J'ai trouvé qu'il était considérablement plus précis que le modèle que j'ai formé. Comme prévu, Google dans le monde. .. ..
Jetons un bref coup d'œil au code de la méthode detect_document.
client = vision.ImageAnnotatorClient()
with io.open(path, 'rb') as image_file:
content = image_file.read()
image = vision.types.Image(content=content)
L'authentification et l'acquisition d'images sont effectuées dans cette partie. Si les paramètres d'authentification ne sont pas définis correctement, une erreur se produira sur la première ligne. Vient ensuite la partie reconnaissance.
response = client.document_text_detection(image=image)
C'est la seule ligne qui reconnaît réellement. Le résultat de l'application de l'image spécifiée dans l'image à la reconnaissance du modèle entraîné par Google au préalable est renvoyé en réponse.
for page in response.full_text_annotation.pages:
for block in page.blocks:
print('\nBlock confidence: {}\n'.format(block.confidence))
for paragraph in block.paragraphs:
print('Paragraph confidence: {}'.format(
paragraph.confidence))
for word in paragraph.words:
word_text = ''.join([
symbol.text for symbol in word.symbols
])
print('Word text: {} (confidence: {})'.format(
word_text, word.confidence))
Le résultat est affiché dans cette partie. Un bloc est une collection de mots et vous pouvez accéder à la confiance du bloc entier dans block.confidence. Block. Paragraphs pour ce qui est reconnu comme une phrase (paragraphe) dans un bloc, block.words pour ce qui est reconnu comme un mot dans un paragraphe et block.symbols pour chaque caractère (symboles) dans un mot. Vous pouvez y accéder.
Si vous voulez faire quelque chose avec les résultats de la reconnaissance, vous devriez obtenir un moyen d'accéder à chaque résultat de reconnaissance de cette partie.
Comme prévu, il s'agissait de précision et de vitesse de traitement. Je voulais aussi toucher à diverses autres choses.
Merci d'avoir regardé jusqu'à la fin. Je suis toujours une personne inexpérimentée, alors n'hésitez pas à me contacter si vous avez des suggestions ou des questions concernant l'article.
Recommended Posts