Commit 6ad9e3fac54a8cac791d2a154fb0766a2b16c010

Authored by Austin Blanton
1 parent 86572054

Show add comparison to python example

Showing 1 changed file with 35 additions and 12 deletions
docs/docs/api_docs/python_api.md
1 # Python API 1 # Python API
2 2
3 -The Python API is a light wrapper of the C API. It creates an object that has [all the C functions](c_api/functions.md): 3 +The Python API is a light wrapper of the C API. It creates an object that has [all the C functions](c_api/functions.md). Here is a fictional example that, given a `MagicalImageURLGenerator` and a `CatFaceRecognitionModel`, will find cat faces most similar to the cats in a query image.
4 4
5 from brpy import init_brpy 5 from brpy import init_brpy
  6 + import requests # or whatever http request lib you prefer
  7 + import MagicalImageURLGenerator # made up
6 8
7 # br_loc is /usr/local/lib by default, 9 # br_loc is /usr/local/lib by default,
8 # you may change this by passing a different path to the shared objects 10 # you may change this by passing a different path to the shared objects
9 br = init_brpy(br_loc='/path/to/libopenbr') 11 br = init_brpy(br_loc='/path/to/libopenbr')
10 br.br_initialize_default() 12 br.br_initialize_default()
11 -  
12 - img = open('catpic.jpg','rb').read()  
13 -  
14 - br.br_set_property('algorithm','MyCatFaceDetectionModel') 13 + br.br_set_property('algorithm','CatFaceRecognitionModel') # also made up
15 br.br_set_property('enrollAll','true') 14 br.br_set_property('enrollAll','true')
16 15
17 - tmpl = br.br_load_img(img, len(img))  
18 - catfaces = br.br_enroll_template(tmpl)  
19 -  
20 - print('This pic has %i cats in it!' % br.br_num_templates(catfaces))  
21 -  
22 - br.br_free_template(tmpl)  
23 - br.br_free_template_list(catfaces) 16 + mycatsimg = open('mycats.jpg', 'rb').read() # cat picture not provided =^..^=
  17 + mycatstmpl = br.br_load_img(mycatsimg, len(mycatsimg))
  18 + query = br.br_enroll_template(mycatstmpl)
  19 + nqueries = br.br_num_templates(query)
  20 +
  21 + scores = []
  22 + for imurl in MagicalImageURLGenerator():
  23 + # load and enroll image from URL
  24 + img = requests.get(imurl).content
  25 + tmpl = br.br_load_img(img, len(img))
  26 + targets = br.br_enroll_template(tmpl)
  27 + ntargets = br.br_num_templates(targets)
  28 +
  29 + # compare and collect scores
  30 + scoresmat = br.br_compare_template_lists(targets, query)
  31 + for r in range(ntargets):
  32 + for c in range(nqueries):
  33 + scores.append((imurl, br.br_get_matrix_output_at(scoresmat, r, c)))
  34 +
  35 + # clean up - no memory leaks
  36 + br.br_free_template(tmpl)
  37 + br.br_free_template_list(targets)
  38 +
  39 + # print top 10 match URLs
  40 + scores.sort(key=lambda s: s[1])
  41 + for s in scores[:10]:
  42 + print(s[0])
  43 +
  44 + # clean up - no memory leaks
  45 + br.br_free_template(mycatstmpl)
  46 + br.br_free_template_list(query)
24 br.br_finalize() 47 br.br_finalize()
25 48
26 To enable the module, add `-DBR_INSTALL_BRPY=ON` to your cmake command (or use the ccmake GUI - highly recommended). 49 To enable the module, add `-DBR_INSTALL_BRPY=ON` to your cmake command (or use the ccmake GUI - highly recommended).