Что такое AWS Rekognition?
Amazon Rekognition упрощает добавление анализа изображений и видео к вашим приложениям с помощью проверенной, хорошо масштабируемой технологии глубокого обучения, не требующей опыта машинного обучения. С помощью Amazon Rekognition вы можете идентифицировать объекты, людей, текст, сцены и действия в изображениях и видео, а также обнаруживать любой неприемлемый контент. Amazon Rekognition также обеспечивает высокоточный анализ лиц и возможности поиска по лицам, которые можно использовать для обнаружения, анализа и сравнения лиц для широкого спектра сценариев использования для проверки пользователей, подсчета людей и общественной безопасности.
С помощью настраиваемых меток Amazon Rekognition вы можете идентифицировать объекты и сцены на изображениях, которые соответствуют потребностям вашего бизнеса. Например, вы можете построить модель для классификации определенных деталей машин на сборочной линии или для обнаружения нездоровых растений. Amazon Rekognition Custom Labels берет на себя тяжелую работу по разработке модели, поэтому опыт машинного обучения не требуется. Вам просто нужно предоставить изображения объектов или сцен, которые вы хотите идентифицировать, а сервис сделает все остальное.
Предпосылки:
1 Установите aws cli версии 2 на Mac
Для установки и обновления для всех пользователей с помощью командной строки macOS
$ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg" % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 21.3M 100 21.3M 0 0 10.0M 0 0:00:02 0:00:02 --:--:-- 10.0M $ sudo installer -pkg AWSCLIV2.pkg -target / Password: installer: Package name is AWS Command Line Interface installer: Upgrading at base path / installer: The upgrade was successful.
Проверить установку
$ which aws /usr/local/bin/aws $ aws --version aws-cli/2.0.56 Python/3.7.4 Darwin/19.6.0 exe/x86_64
Настроить aws configure
$ aws congfigure AWS Access Key ID [****************DOWD]: AWS Secret Access Key [****************f3ul]: Default region name [us-east-1]: Default output format [json]:
Для других платформ посетите здесь.
2 Установите Python, Pip, Boto3
Homebrew установлен для установки Mac (Chocolatey при использовании Windows)
Установка Homebrew
Откройте терминал и введите
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" . . . ==> Installation successful!==> Homebrew has enabled anonymous aggregate formulae and cask analytics. Read the analytics documentation (and how to opt-out) here: https://docs.brew.sh/Analytics No analytics data has been sent yet (or will be during this `install` run).==> Homebrew is run entirely by unpaid volunteers. Please consider donating: https://github.com/Homebrew/brew#donations==> Next steps: - Run `brew help` to get started - Further documentation: https://docs.brew.sh
Проверьте установку Homebrew
$ brew --version Homebrew 2.4.16 Homebrew/homebrew-core (git revision 23bea; last commit 2020-09-04) Homebrew/homebrew-cask (git revision 5beb1; last commit 2020-09-05)
После установки Homebrew вставьте каталог Homebrew в верхнюю часть переменной среды PATH
. Вы можете сделать это, добавив следующую строку внизу вашего ~/.profile
файла
export PATH="/usr/local/opt/python/libexec/bin:$PATH"
2. Необходимо установить Python (версия должна быть 3.7, чтобы гарантировать, что все функции будут доступны для достижения желаемого результата).
Установка Python3
Теперь мы можем установить Python 3:
$ brew install python Updating Homebrew... ==> Auto-updated Homebrew! Updated 1 tap (homebrew/cask). ==> Updated Casks sessionWarning: [email protected] 3.8.5 is already installed and up-to-date ### my python was preinstalled, you may see different installation process. And it may take a while before python is fully installed
Убедитесь, что ваш python3 установлен
$ python3 --version Python 3.8.5
Примечания: вы можете установить Python по умолчанию как последнюю версию, применив следующий код
$ unlink /usr/local/bin/python $ ln -s /usr/local/bin/python3.8 /usr/local/bin/python
Установка Pip
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1841k 100 1841k 0 0 2989k 0 --:--:-- --:--:-- --:--:-- 2984k $ python get-pip.py /usr/local/lib/python3.8/site-packages/setuptools/distutils_patch.py:25: UserWarning: Distutils was imported before Setuptools. This usage is discouraged and may exhibit undesirable behaviors or errors. Please use Setuptools' objects directly or at least import Setuptools first. warnings.warn( Collecting pip Using cached pip-20.2.3-py2.py3-none-any.whl (1.5 MB) Installing collected packages: pip Attempting uninstall: pip Found existing installation: pip 20.2.3 Uninstalling pip-20.2.3: Successfully uninstalled pip-20.2.3 Successfully installed pip-20.2.3
Проверить установку
$ pip --version pip 20.2.3 from /usr/local/lib/python3.8/site-packages/pip (python 3.8)
Установка Boto3
$ python -m pip install boto3 Requirement already satisfied: boto3 in /usr/local/lib/python3.8/site-packages (1.15.14) Requirement already satisfied: jmespath<1.0.0,>=0.7.1 in /usr/local/lib/python3.8/site-packages (from boto3) (0.10.0) Requirement already satisfied: s3transfer<0.4.0,>=0.3.0 in /usr/local/lib/python3.8/site-packages (from boto3) (0.3.3) Requirement already satisfied: botocore<1.19.0,>=1.18.14 in /usr/local/lib/python3.8/site-packages (from boto3) (1.18.14) Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in /usr/local/lib/python3.8/site-packages (from botocore<1.19.0,>=1.18.14->boto3) (2.8.1) Requirement already satisfied: urllib3<1.26,>=1.20; python_version != "3.4" in /usr/local/lib/python3.8/site-packages (from botocore<1.19.0,>=1.18.14->boto3) (1.25.10) Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.8/site-packages (from python-dateutil<3.0.0,>=2.1->botocore<1.19.0,>=1.18.14->boto3) (1.15.0)
Проверить установку
$ pip show boto3 Name: boto3 Version: 1.15.14 Summary: The AWS SDK for Python Home-page: https://github.com/boto/boto3 Author: Amazon Web Services Author-email: UNKNOWN License: Apache License 2.0 Location: /usr/local/lib/python3.8/site-packages Requires: botocore, jmespath, s3transfer Required-by: aws-shell
Интерфейс командной строки AWS для обнаружения лиц на изображении
Прежде чем извлекать изображение из корзины S3, нам сначала нужно создать корзину S3 и загрузить в нее изображение.
$ aws s3api create-bucket --bucket myfacetestbucket --region us-east-1 $ aws s3 cp Roger.jpg s3://myfacetestbucket/test
Следующая команда detect-faces обнаруживает лица на указанном изображении, хранящемся в корзине Amazon S3.
$ aws rekognition detect-faces \ > --image '{"S3Object":{"Bucket":"myfacetestbucket","Name":"test"}}' \ > --attributes "ALL" { "FaceDetails": [ { "BoundingBox": { "Width": 0.124217189848423, "Height": 0.36695611476898193, "Left": 0.5486249327659607, "Top": 0.4285665452480316 }, "AgeRange": { "Low": 32, "High": 48 }, "Smile": { "Value": true, "Confidence": 93.19034576416016 }, "Eyeglasses": { "Value": false, "Confidence": 99.75462341308594 }, "Sunglasses": { "Value": false, "Confidence": 99.88736724853516 }, "Gender": { "Value": "Male", "Confidence": 99.1171646118164 }, "Beard": { "Value": false, "Confidence": 62.04547882080078 }, "Mustache": { "Value": false, "Confidence": 96.88816833496094 }, "EyesOpen": { "Value": true, "Confidence": 99.10486602783203 }, "MouthOpen": { "Value": true, "Confidence": 95.41327667236328 }, "Emotions": [ { "Type": "HAPPY", "Confidence": 74.1766357421875 }, { "Type": "DISGUSTED", "Confidence": 13.986865997314453 }, { "Type": "ANGRY", "Confidence": 5.650695323944092 }, { "Type": "CALM", "Confidence": 2.472118377685547 }, { "Type": "CONFUSED", "Confidence": 1.4807705879211426 }, { "Type": "SAD", "Confidence": 0.8507742285728455 }, { "Type": "SURPRISED", "Confidence": 0.7629778981208801 }, { "Type": "FEAR", "Confidence": 0.6191766858100891 } ], "Landmarks": [ { "Type": "eyeLeft", "X": 0.5736368894577026, "Y": 0.5886330604553223 }, { "Type": "eyeRight", "X": 0.6275773048400879, "Y": 0.5819094181060791 }, { "Type": "mouthLeft", "X": 0.5846119523048401, "Y": 0.7058932781219482 }, { "Type": "mouthRight", "X": 0.6296831965446472, "Y": 0.7008261680603027 }, { "Type": "nose", "X": 0.5938411951065063, "Y": 0.6590603590011597 }, { "Type": "leftEyeBrowLeft", "X": 0.5556175708770752, "Y": 0.560141921043396 }, { "Type": "leftEyeBrowRight", "X": 0.5653775334358215, "Y": 0.5500103235244751 }, { "Type": "leftEyeBrowUp", "X": 0.5794927477836609, "Y": 0.5560234189033508 }, { "Type": "rightEyeBrowLeft", "X": 0.6103295087814331, "Y": 0.5515798330307007 }, { "Type": "rightEyeBrowRight", "X": 0.6275314688682556, "Y": 0.5412198901176453 }, { "Type": "rightEyeBrowUp", "X": 0.649406373500824, "Y": 0.5475934147834778 }, { "Type": "leftEyeLeft", "X": 0.5652635097503662, "Y": 0.5878733992576599 }, { "Type": "leftEyeRight", "X": 0.5843948721885681, "Y": 0.5882930159568787 }, { "Type": "leftEyeUp", "X": 0.5726075172424316, "Y": 0.5832690000534058 }, { "Type": "leftEyeDown", "X": 0.5740702748298645, "Y": 0.5937448143959045 }, { "Type": "rightEyeLeft", "X": 0.6169412136077881, "Y": 0.584111213684082 }, { "Type": "rightEyeRight", "X": 0.6384167671203613, "Y": 0.5785976052284241 }, { "Type": "rightEyeUp", "X": 0.6267658472061157, "Y": 0.5763338208198547 }, { "Type": "rightEyeDown", "X": 0.6275367736816406, "Y": 0.587045431137085 }, { "Type": "noseLeft", "X": 0.5905563235282898, "Y": 0.666114091873169 }, { "Type": "noseRight", "X": 0.6105850338935852, "Y": 0.6634709239006042 }, { "Type": "mouthUp", "X": 0.6012259125709534, "Y": 0.6936687231063843 }, { "Type": "mouthDown", "X": 0.6045928597450256, "Y": 0.72735995054245 }, { "Type": "leftPupil", "X": 0.5736368894577026, "Y": 0.5886330604553223 }, { "Type": "rightPupil", "X": 0.6275773048400879, "Y": 0.5819094181060791 }, { "Type": "upperJawlineLeft", "X": 0.5575063824653625, "Y": 0.5780422687530518 }, { "Type": "midJawlineLeft", "X": 0.5734659433364868, "Y": 0.7052022218704224 }, { "Type": "chinBottom", "X": 0.612401008605957, "Y": 0.7830801010131836 }, { "Type": "midJawlineRight", "X": 0.6692211627960205, "Y": 0.6919513940811157 }, { "Type": "upperJawlineRight", "X": 0.6752238869667053, "Y": 0.5615693926811218 } ], "Pose": { "Roll": -4.978456974029541, "Yaw": -13.672887802124023, "Pitch": -1.7135460376739502 }, "Quality": { "Brightness": 77.12853240966797, "Sharpness": 89.85481262207031 }, "Confidence": 99.99987030029297 } ] }
Распознавание знаменитостей на изображении с помощью интерфейса командной строки AWS
Прежде чем извлекать изображение из корзины S3, нам сначала нужно создать корзину S3 и загрузить в нее изображение.
$ aws s3api create-bucket --bucket myfacetestbucket --region us-east-1 $ aws s3 cp Roger.jpg s3://myfacetestbucket/test
Эта команда интерфейса командной строки AWS отображает вывод JSON для операции recognize-celebrities
CLI. Роджер Федерер изображен на изображении.
$
aws rekognition recognize-celebrities \
> --image "S3Object={Bucket=myfacetestbucket,Name=test}"
{
"CelebrityFaces": [
{
"Urls": [
"www.imdb.com/name/nm1716574"
],
"Name": "Roger Federer", ### Is it cool? Roger Federer revealed!
"Id": "6bN4xP",
"Face": {
"BoundingBox": {
"Width": 0.18400000035762787,
"Height": 0.36800000071525574,
"Left": 0.5144000053405762,
"Top": 0.42559999227523804
},
"Confidence": 99.99990844726562,
"Landmarks": [
{
"Type": "eyeLeft",
"X": 0.5754296183586121,
"Y": 0.5891759991645813
},
{
"Type": "eyeRight",
"X": 0.6299571990966797,
"Y": 0.5762431025505066
},
{
"Type": "nose",
"X": 0.5906926989555359,
"Y": 0.6588773727416992
},
{
"Type": "mouthLeft",
"X": 0.5828781127929688,
"Y": 0.7055491209030151
},
{
"Type": "mouthRight",
"X": 0.6347113847732544,
"Y": 0.6932297945022583
}
],
"Pose": {
"Roll": -5.585475921630859,
"Yaw": -25.769460678100586,
"Pitch": -6.5233259201049805
},
"Quality": {
"Brightness": 56.052215576171875,
"Sharpness": 97.46806335449219
}
},
"MatchConfidence": 100.0
}
],
"UnrecognizedFaces": []
}
Обнаружение ярлыков с помощью Python
Прежде чем извлекать изображение из корзины S3, нам сначала нужно создать корзину S3 и загрузить в нее изображение.
$ aws s3api create-bucket --bucket myfacetestbucket --region us-east-1 $ aws s3 cp Roger.jpg s3://myfacetestbucket/test
vim label.py
Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. #PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.) import boto3 def detect_labels(photo, bucket): client=boto3.client('rekognition') response = client.detect_labels(Image={'S3Object':{'Bucket':bucket,'Name':photo}}, MaxLabels=10) print('Detected labels for ' + photo) print() for label in response['Labels']: print ("Label: " + label['Name']) print ("Confidence: " + str(label['Confidence'])) print ("Instances:") for instance in label['Instances']: print (" Bounding box") print (" Top: " + str(instance['BoundingBox']['Top'])) print (" Left: " + str(instance['BoundingBox']['Left'])) print (" Width: " + str(instance['BoundingBox']['Width'])) print (" Height: " + str(instance['BoundingBox']['Height'])) print (" Confidence: " + str(instance['Confidence'])) print() print ("Parents:") for parent in label['Parents']: print (" " + parent['Name']) print ("----------") print () return len(response['Labels']) def main(): photo='test' ### Input name of your object in S3 bucket bucket='myfacetestbucket' ### Name of your S3 bucket label_count=detect_labels(photo, bucket) print("Labels detected: " + str(label_count)) if __name__ == "__main__": main()
Результат этого
$ python label.py Detected labels for test Label: Person Confidence: 98.4091796875 Instances: Bounding box Top: 0.11844990402460098 Left: 0.1067546159029007 Width: 0.7130014896392822 Height: 0.8799501061439514 Confidence: 96.84175109863281 Parents: ---------- Label: Sport Confidence: 93.61238861083984 Instances: Parents: Person ---------- Label: People Confidence: 80.27007293701172 Instances: Parents: Person ---------- Label: Finger Confidence: 79.93012237548828 Instances: Parents: ---------- Label: Face Confidence: 72.68374633789062 Instances: Parents: Person ---------- Label: Tennis Confidence: 72.09969329833984 Instances: Parents: Sport Person ---------- Label: Tennis Racket Confidence: 61.02318572998047 Instances: Parents: ---------- Label: Sphere Confidence: 60.62116622924805 Instances: Parents: ---------- Label: Team Sport Confidence: 60.16021728515625 Instances: Parents: Sport Person People ---------- Label: Ping Pong Confidence: 57.140323638916016 Instances: Parents: Sport Person ---------- Labels detected: 10
Обнаружение текста в изображении с помощью Python
Прежде чем извлекать изображение из корзины S3, нам сначала нужно создать корзину S3 и загрузить в нее изображение.
$ aws s3api create-bucket --bucket rekognitiontextbucket --region us-east-1 $ aws s3 cp Forest.jpg s3://rekognitiontextbucket/test
vim Detectext.py
# Change the value of bucket to the S3 bucket that contains your image file. # Change the value of photo to your image file name. bucket='rekognitiontextbucket' photo='test' client=boto3.client('rekognition') response=client.detect_text(Image={'S3Object':{'Bucket':bucket,'Name':photo}}) textDetections=response['TextDetections'] print ('Detected text') for text in textDetections: print ('Detected text:' + text['DetectedText']) print ('Confidence: ' + "{:.2f}".format(text['Confidence']) + "%") print ('Id: {}'.format(text['Id'])) if 'ParentId' in text: print ('Parent Id: {}'.format(text['ParentId'])) print ('Type:' + text['Type']) print
Попробуй это
$ python detectext.py Detected text Detected text:FOREST Confidence: 99.90% Id: 0 Type:LINE Detected text:FOREST Confidence: 99.90% Id: 1 Parent Id: 0 Type:WORD
Вуаля, прощай!
В этом проекте мы продемонстрировали, как AWS rekognition может обнаруживать и анализировать данные с изображения. Если вас это интересует, посетите здесь, чтобы найти больше примеров.
Хотя в рамках проекта мы коснулись только AWS Rekognition с использованием AWS CLI и Python, но есть еще целый ряд других языков программирования и возможностей, вы можете погрузиться в них, если захотите.
Поскольку искусственный интеллект и большие данные постоянно развиваются, может появиться гораздо больше технологий.