J'ai vu article que tensorflow a publié une API qui facilite la reconnaissance d'objets avec techcrunch, donc je l'ai essayé immédiatement. J'ai fait. Une explication détaillée peut être lue sur github.
OS : macOS Sierra 10.12.5 environnement python: anaconda3-4.2.0 (python 3.5.2) tensorflow: v1.2.0 (l'installation a été effectuée à l'avance)
J'ai utilisé le modèle keras tout le temps, et je n'avais jamais utilisé le modèle tensorflow, donc je l'ai cloné. Quant à l'endroit, j'ai fait ~ / tensorflow
selon le tutoriel. En cela, j'ai cloné des modèles. Il y avait différents modèles, donc si j'ai le temps, je vais l'essayer.
$ cd
$ mkdir tensorflow
$ cd tensorflow
$ git clone https://github.com/tensorflow/models.git
setup Il y avait diverses choses écrites, j'ai donc ajouté diverses choses.
Tout d'abord, j'ai ramassé certaines choses qui manquaient à pip. Je n'avais pas lxml dans mon environnement, alors je l'ai ajouté. Vous pouvez vérifier si cela suffit ou pas avec la commande ci-dessous.
$ pip freeze
Ensuite, j'ai dû installer Protobuf, mais comme il était écrit dans le corps de linux lors de l'installation du tutoriel, je l'ai installé en utilisant homebrew au lieu d'apt-get.
$ brew install protobuf
Puis compilez, configurez et testez. Exécutez la commande suivante dans ~ / tensorflow / models / research
.
$ protoc object_detection/protos/*.proto --python_out=.
$ export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
$ python object_detection/builders/model_builder_test.py
Si vous obtenez un message OK, l'installation est probablement terminée.
Exécutez jupyter notebook
à ~ / tensorflow / models / research / object_detection
. Ouvrez simplement ʻobject_detection_tutorial.ipynb. Les images de test se trouvent dans
~ / tensorflow / models / research / object_detection / test_images. Exécutez à partir de la cellule ci-dessus et lorsque vous atteignez la fin, l'exécution devrait être terminée. Si vous voulez essayer votre propre image immédiatement, remplacez ʻimage1.jpg
ou ʻimage2.jpg dans
test_image` et exécutez, ou utilisez l'avant-dernière cellule.
# For the sake of simplicity we will use only 2 images:
# image1.jpg
# image2.jpg
# If you want to test the code with your images, just add path to the images to the TEST_IMAGE_PATHS.
PATH_TO_TEST_IMAGES_DIR = 'test_images'
# TEST_IMAGE_PATHS = [ os.path.join(PATH_TO_TEST_IMAGES_DIR, 'image{}.jpg'.format(i)) for i in range(1, 3) ]
TEST_IMAGE_PATHS = ['Nom de fichier de votre image préférée']
# Size, in inches, of the output images.
IMAGE_SIZE = (12,8)
Vous pouvez l'exécuter en tant que. Vous pouvez enregistrer l'image de sortie en réécrivant la dernière cellule.
with detection_graph.as_default():
with tf.Session(graph=detection_graph) as sess:
for image_path in TEST_IMAGE_PATHS:
image = Image.open(image_path)
# the array based representation of the image will be used later in order to prepare the
# result image with boxes and labels on it.
image_np = load_image_into_numpy_array(image)
# Expand dimensions since the model expects images to have shape: [1, None, None, 3]
image_np_expanded = np.expand_dims(image_np, axis=0)
image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')
# Each box represents a part of the image where a particular object was detected.
boxes = detection_graph.get_tensor_by_name('detection_boxes:0')
# Each score represent how level of confidence for each of the objects.
# Score is shown on the result image, together with the class label.
scores = detection_graph.get_tensor_by_name('detection_scores:0')
classes = detection_graph.get_tensor_by_name('detection_classes:0')
num_detections = detection_graph.get_tensor_by_name('num_detections:0')
# Actual detection.
(boxes, scores, classes, num_detections) = sess.run(
[boxes, scores, classes, num_detections],
feed_dict={image_tensor: image_np_expanded})
# Visualization of the results of a detection.
vis_util.visualize_boxes_and_labels_on_image_array(
image_np,
np.squeeze(boxes),
np.squeeze(classes).astype(np.int32),
np.squeeze(scores),
category_index,
use_normalized_coordinates=True,
line_thickness=8)
print(image_path.split('.')[0]+'_labeled.jpg') #Pour confirmation
plt.figure(figsize=IMAGE_SIZE, dpi=300) #Vous pourrez lire les caractères si vous jouez avec dpi
plt.imshow(image_np)
plt.savefig(image_path.split('.')[0] + '_labeled.jpg') #Ajouter ici
Il y a des gars qui ne sont pas des vaches, mais c'est juste.
Il semble que cette zone ait déjà été faite par Keras, je voudrais donc l'essayer la prochaine fois. J'aimerais l'essayer avec une vidéo. Cet article semble bon.