Ich habe Artikel gesehen, dass Tensorflow eine API herausgegeben hat, die die Objekterkennung mit Techcrunch erleichtert, also habe ich es sofort versucht. Ich tat. Eine ausführliche Erklärung finden Sie unter github.
OS : macOS Sierra 10.12.5 Python-Umgebung: anaconda3-4.2.0 (Python 3.5.2) Tensorflow: v1.2.0 (Installation wurde im Voraus durchgeführt)
Ich habe die ganze Zeit das Keras-Modell verwendet, und ich hatte das Tensorflow-Modell nie verwendet, also habe ich es geklont. Was den Ort betrifft, habe ich "~ / tensorflow" gemäß dem Tutorial gemacht. Darin habe ich Modelle geklont. Es gab verschiedene Modelle. Wenn ich Zeit habe, werde ich es versuchen.
$ cd
$ mkdir tensorflow
$ cd tensorflow
$ git clone https://github.com/tensorflow/models.git
setup Es gab verschiedene Dinge geschrieben, also habe ich verschiedene Dinge hinzugefügt.
Zuerst habe ich einige Dinge aufgegriffen, die Pip fehlen. Ich hatte kein lxml in meiner Umgebung, also habe ich es hinzugefügt. Mit dem folgenden Befehl können Sie überprüfen, ob dies ausreicht oder nicht.
$ pip freeze
Als nächstes musste ich Protobuf installieren, aber da es in der Installation des Tutorials in Linux geschrieben wurde, installierte ich es mit Homebrew anstelle von apt-get.
$ brew install protobuf
Dann kompilieren, konfigurieren und testen. Führen Sie den folgenden Befehl in ~ / tensorflow / models / research
aus.
$ protoc object_detection/protos/*.proto --python_out=.
$ export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
$ python object_detection/builders/model_builder_test.py
Wenn Sie eine OK-Meldung erhalten, ist die Installation wahrscheinlich abgeschlossen.
Führen Sie "jupyter notebook" unter "~ / tensorflow / models / research / object_detection" aus. Öffnen Sie einfach object_detection_tutorial.ipynb
. Die Testbilder befinden sich in ~ / tensorflow / models / research / object_detection / test_images
. Führen Sie die Ausführung in der obigen Zelle aus. Wenn Sie das Ende erreicht haben, sollte die Ausführung abgeschlossen sein. Wenn Sie Ihr eigenes Bild sofort ausprobieren möchten, ersetzen Sie "image1.jpg " oder "image2.jpg " in "test_image" und führen Sie es aus oder verwenden Sie die vorletzte Zelle.
# 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 = ['Dateiname Ihres Lieblingsbildes']
# Size, in inches, of the output images.
IMAGE_SIZE = (12,8)
Sie können es als ausführen. Sie können das Ausgabebild speichern, indem Sie die letzte Zelle neu schreiben.
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') #Zur Bestätigung
plt.figure(figsize=IMAGE_SIZE, dpi=300) #Sie können Zeichen lesen, wenn Sie mit dpi spielen
plt.imshow(image_np)
plt.savefig(image_path.split('.')[0] + '_labeled.jpg') #Hier hinzufügen
Es gibt einige Nicht-Kuh-Typen, aber es ist fair.
Es scheint, dass dieser Bereich bereits von Keras erstellt wurde, daher würde ich ihn gerne beim nächsten Mal ausprobieren. Ich würde es gerne mit einem Video versuchen. Dieser Artikel sieht gut aus.
Recommended Posts