- update for correct parameter naming matching
authorEric Zavesky <ezavesky@research.att.com>
Wed, 18 Oct 2017 14:25:27 +0000 (09:25 -0500)
committerEric Zavesky <ezavesky@research.att.com>
Wed, 18 Oct 2017 14:25:27 +0000 (09:25 -0500)
model

testing/README.md
testing/app.py
testing/swagger.yaml
web_demo/face-privacy.css
web_demo/face-privacy.js

index 7d0e741..1120161 100644 (file)
@@ -3,37 +3,87 @@ This directory provides a simple web server for demonstrating a face-privacy fil
 This web demo will launch an application with a swagger page.
 
 ## Example usage
+This repo provides multiple models that can be created.  Thanks to the
+generic transform i/o specifications, you can run either one or two
+models in composition together.
 
 ```
-$ python app.py
-usage: app.py [-h] [--port PORT] [--modeldir MODELDIR] [--rich_return]
+usage: app.py [-h] [-p PORT] [-d MODELDIR_DETECT] [-a MODELDIR_ANALYZE]
 
 optional arguments:
-  -h, --help           show this help message and exit
-  --port PORT          port to launch the simple web server
-  --modeldir MODELDIR  model directory to load dumped artifact
+  -h, --help            show this help message and exit
+  -p PORT, --port PORT  port to launch the simple web server
+  -d MODELDIR_DETECT, --modeldir_detect MODELDIR_DETECT
+                        model directory for detection
+  -a MODELDIR_ANALYZE, --modeldir_analyze MODELDIR_ANALYZE
+                        model directory for detection
 ```
 
 ### Output formats
-The optional HTTP parameter `rich_output` will generate a more decorated JSON output
- that is also understood by the included web application.
-
-* standard output - from `DataFrame` version of the transform
-```
+This repo provides multiple models that can be created.
 
+* detect output - The first set, called
+`detect` will analyze an image, detect face regions, and echo both the
+regions and the face back to the user.  The region marked with `-1`
+and a valid `mime_type` parameter will
+always be the region with the original image.
 
 ```
+[
+    {
+        "h": 143,
+        "x": 0,
+        "y": 0,
+        "base64_data": "/9j/4AAQSkZJRgABA....",
+        "w": 2048,
+        "region": -1,
+        "image": 0,
+        "mime_type": "image/jpeg"
+    },
+    {
+        "h": 143,
+        "x": 203,
+        "y": 189,
+        "base64_data": "",
+        "w": 143,
+        "region": 0,
+        "image": 0,
+        "mime_type": ""
+    },
+    ...
+    {
+        "h": 212,
+        "x": 886,
+        "y": 409,
+        "base64_data": "",
+        "w": 212,
+        "region": 3,
+        "image": 0,
+        "mime_type": ""
+    }
+]
 
+```
 
-* rich output - formatted form of the transform
+* analyzed output - The second type of output produces processed
+images as an output.  These images are base64 encoded with a decoding
+mime type.
 ```
+[
+    {
+        "base64_data": "/9j/4AAQSkZJRgABAQAAAQABAAD....",
+        "mime_type": "image/jpeg"
+    }
+]
+
 ```
 
 ## Face Privacy Filtering
 
 * For a graphical experience, view the swagger-generated UI at [http://localhost:8884/ui].
 * Additionally, a simple command-line utility could be used to post an image
-and mime type to the main interface.
+and mime type to the main interface.  Additional examples for posting base64 encoded
+images from javascript can be [found on StackOverflow](https://stackoverflow.com/a/20285053).
+```
+curl -F base64_data=@../web_demo/images/face_renion.jpg -F mime_type="image/jpeg" "http://localhost:8884/transform"
 ```
-curl -F image_binary=@test.jpg -F rich_output="true" -F mime_type="image/jpeg" "http://localhost:8884/transform"
-```
\ No newline at end of file
index 79c434e..8b7f5f0 100755 (executable)
@@ -25,10 +25,10 @@ def generate_image_df(path_image="", bin_stream=b""):
         bin_stream = bin_stream.decode()
     return pd.DataFrame([['image/jpeg', bin_stream]], columns=[FaceDetectTransform.COL_IMAGE_MIME, FaceDetectTransform.COL_IMAGE_DATA])
 
-def transform(mime_type, image_binary):
+def transform(mime_type, base64_data):
     app = current_app
     time_start = time.clock()
-    image_read = image_binary.stream.read()
+    image_read = base64_data.stream.read()
     X = generate_image_df(bin_stream=image_read)
     print(X)
 
index 4cccfcd..f463104 100644 (file)
@@ -13,7 +13,7 @@ paths:
       summary: Post an image for processing
       parameters:
         - $ref: '#/parameters/mime_type'
-        - $ref: '#/parameters/image_binary'
+        - $ref: '#/parameters/base64_data'
       responses:
         200:
           description: Image processed
@@ -27,8 +27,8 @@ parameters:
     required: true
     default: 'image/jpeg'
     # pattern: "^[a-zA-Z0-9-]+$"
-  image_binary:
-    name: image_binary
+  base64_data:
+    name: base64_data
     description: Binary image blob
     in: formData
     type: file
index a4492c3..4fb1f95 100644 (file)
@@ -33,6 +33,12 @@ hr {
     // position: absolute;\r
     // left: 15px;\r
     // top: 10px;\r
+    max-width:100%;\r
+    max-height:300px;\r
+    margin-left: auto;\r
+    margin-right: auto;\r
+    width: auto;\r
+    height: auto;\r
 }\r
 \r
 \r
index c4ee8a8..d20654c 100644 (file)
@@ -222,14 +222,14 @@ function getUrlParameter(sParam) {
  */\r
 function doPostImage(srcCanvas, dstImg, dataPlaceholder) {\r
        var serviceURL = "";\r
-       var dataURL = srcCanvas.toDataURL('image/jpeg', 0.5);\r
+       var dataURL = srcCanvas.toDataURL('image/jpeg', 1.0);\r
        var blob = dataURItoBlob(dataURL);\r
        var hd = $(document.body).data('hdparams');\r
        var fd = new FormData();\r
 \r
        $(document.body).data('hdparams').imageIsWaiting = true;\r
     serviceURL = hd.classificationServer;\r
-    fd.append("image_binary", blob);\r
+    fd.append("base64_data", blob);\r
     fd.append("mime_type", "image/jpeg");\r
     var $dstImg = $(dstImg);\r
     if ($dstImg.attr('src')=='') {\r