Create and Train a Recognizer

To create and train an object class recognizer, follow these steps. For more information about the actions used in this section, refer to the Media Server Reference.

To create and train a recognizer

  1. Start by creating a new recognizer. For example:

    curl http://localhost:14000/action=CreateObjectClassRecognizer -F recognizer=vehicles
  2. (Optional) Choose the type of recognizer that you want to train. For example:

    curl http://localhost:14000/action=SetObjectClassRecognizerTrainingOption -F key=recognizer_type -F value=generation2
  3. Add your chosen object classes to the recognizer.

    The following example adds a new class named "car" to the "vehicles" recognizer.

    curl http://localhost:14000/action=CreateObjectClass -F recognizer=vehicles -F identifier=car
  4. Add images to the recognizer that contain example objects for training.

    The following example adds two images to the "vehicles" recognizer, and labels them "car42" and "bike19":

    curl http://localhost:14000/action=AddObjectClassImages -F recognizer=vehicles -F imagedata=@car42.jpg,bike19.jpg -F imagelabels=car42,bike19
  5. Annotate each training image. An annotation identifies a region of a training image that contains an object, and the class that the object belongs to. Media Server can then use that region of the image to train the recognizer. You can add multiple annotations to the same image, if the image contains multiple objects.

    The following example adds an annotation to the image "car42", associating a region covering the center 25% of the image with the "car" object class. The region is specified by the Boxes parameter, which is a comma-separated list of values in the form (left,top,width,height). Left specifies the distance from the left side of the image to the left side of the region. Top specifies the distance from the top of the image to the top of the region. Width and Height specify the width and height of the region. The values are in pixels, unless you set RegionsAsPercentage=true (in which case specify Left and Width as a percentage of the image width and Top and Height as a percentage of the image height).

    curl http://localhost:14000/action=AddObjectClassAnnotations -F recognizer=vehicles -F imagelabel=car42 -F identifiers=car -F boxes=(25,25,50,50) -F regionsaspercentage=true

    TIP: To obtain a list of training images that have been added to the recognizer but have not been annotated, use the action ListUnannotatedObjectClassImages.

  6. Choose the number of training iterations to run.

    curl http://localhost:14000/action=SetObjectClassRecognizerTrainingOption -F recognizer=vehicles -F key=iterations -F value=2000
  7. (Optional) To set aside images to evaluate the performance of the recognizer and find the optimum number of training iterations, enable snapshots by setting the snapshot_frequency training option. If you want to change the proportion of images that are set aside, you can set the validation_proportion training option.

    curl http://localhost:14000/action=SetObjectClassRecognizerTrainingOption -F recognizer=vehicles -F key=snapshot_frequency -F value=500
  8. Train Media Server by building the recognizer. For example:

    curl http://localhost:14000/action=BuildObjectClassRecognizer -F recognizer=vehicles

    This action is asynchronous, so Media Server returns a token. You can use the QueueInfo action to check the status of the request.

    When the BuildObjectClassRecognizer action has finished, you can use the recognizer. If you did not enable snapshots, the training process is complete.

  9. If you enabled snapshots, test the performance of the recognizer and select the snapshot to use.

    1. List the snapshots that are available.

      curl http://localhost:14000/action=ListObjectClassRecognizers

      The response to this action includes an index number for each snapshot.

    2. Run the action TestObjectClassRecognizerSnapshot for each snapshot that you want to evaluate. The action is asynchronous, so Media Server returns a token. You can use the QueueInfo action to check the status of your request(s).

      curl http://localhost:14000/action=TestObjectClassRecognizerSnapshot -F recognizer=vehicles -F snapshotindex=0
    3. Review the results with the action GetObjectClassRecognizerSnapshotStatistics.

      curl http://localhost:14000/action=GetObjectClassRecognizerSnapshotStatistics -F recognizer=vehicles
    4. If one of the snapshots provides acceptable performance, select the snapshot by running the action SelectObjectClassRecognizerSnapshot.

      curl http://localhost:14000/action=SelectObjectClassRecognizerSnapshot -F recognizer=vehicles -F snapshotindex=3

      If none of the snapshots provides acceptable performance, you might need to add additional training data or run more training iterations.