Classifying Images with ImageNet terug naar de inleiding
Dit project maakt gebruik van de software in de jetson-inference map. Het pad en de schets om afbeeldingen te classificeren:
jetson-inference/build/aarch64/bin/imagenet-console.py
imagenet-console.py accepteerd 3 argumenten
1) Het pad naar de input afbeelding met de naam van die afbeelding (afbeelding typen: jpg, png, tga en bmp)
De input afbeelding is de te testen afbeelding. In de map image zitten 85 afbeeldingen
2) optioneel Het pad naar de output afbeelding met de naam van die afbeelding (afbeelding typen: jpg, png, tga en bmp
De output afbeelding is een copie van de input afbeelding met het classificatie resultaat
3) optioneel Een netwerk vlag --network die verwijst naar het classificatie model. Als default wordt googlenet gebruikt
Voorbeelden
1) ./imagenet-console.py images/cat_2.jpg
Met alleen de input afbeelding als argument.
Het googlenet model wordt gebruikt en het classificatie resultaat wordt in de terminal geprint
2) ./imagenet-console.py images/cat_2.jpg output_cat_1.jpg
Nu wordt er ook in de map bin een afbeelding met het classificatie resultaat aangemaakt
3) ./imagenet-console.py --network=resnet-18 images/cat_2.jpg output_cat_2.jpg
Dezelfde afbeelding classificeren maar nu met resnet-18
import jetson.inference
import jetson.utils
import argparse
import sys
# parse the command line
parser = argparse.ArgumentParser(description="Classify an image using an image recognition DNN.",
formatter_class=argparse.RawTextHelpFormatter, epilog=jetson.inference.imageNet.Usage())
parser.add_argument("file_in", type=str, help="filename of the input image to process")
parser.add_argument("file_out", type=str, default=None, nargs='?', help="filename of the output image to save")
parser.add_argument("--network", type=str, default="googlenet", help="pre-trained model to load (see below for options)")
try:
opt = parser.parse_known_args()[0]
except:
print("")
parser.print_help()
sys.exit(0)
# load an image (into shared CPU/GPU memory)
img, width, height = jetson.utils.loadImageRGBA(opt.file_in)
# load the recognition network
net = jetson.inference.imageNet(opt.network, sys.argv)
# classify the image
class_idx, confidence = net.Classify(img, width, height)
# find the object description
class_desc = net.GetClassDesc(class_idx)
# print out the result
print("image is recognized as '{:s}' (class #{:d}) with {:f}% confidence\n".format(class_desc, class_idx, confidence * 100))
# print out timing info
net.PrintProfilerTimes()
# overlay the result on the image
if opt.file_out is not None:
font = jetson.utils.cudaFont(size=jetson.utils.adaptFontSize(width))
font.OverlayText(img, width, height, "{:f}% {:s}".format(confidence * 100, class_desc), 10, 10, font.White, font.Gray40)
jetson.utils.cudaDeviceSynchronize()
jetson.utils.saveImageRGBA(opt.file_out, img, width, height)