# 2020 AI Hackathon This repository uses MaskRCNN to detect car damage. ## MaskRCNN Training * If you have any questions for training MaskRCNN models, please click [this](https://github.com/matterport/Mask_RCNN). ## OpenCV Library * This repository uses [OpenCV 4.4.0](https://opencv.org/opencv-4-4-0/) and [Microsoft Visual Studio 2019](https://visualstudio.microsoft.com/). * To enable OpenCL for OpenCV, please enable ```WITH_OPENCL``` when you configure cmake files. ## (Optional) OpenVino Enviroment * You can install it [here](https://software.intel.com/content/www/us/en/develop/tools/openvino-toolkit.html). * To use OpenCV backend ```DNN_BACKEND_INFERENCE_ENGINE```, please use [cmake](https://cmake.org/) and download the entire [OpenCV](https://opencv.org/opencv-4-4-0/) source code to enable ```WITH_INF_ENGINE```. ## Notes ### 0_Dataset * Car damage dataset. * Each image with one JSON file will record the object's segmentation. ### 1_Maskrcnn_Segmentation #### Program arugments ``` {help | | Print help message. } {weight | | Path to a binary file of model contains trained weights. It could be a file with extensions .caffemodel (Caffe), .pb (TensorFlow), .t7 or .net (Torch), .weights (Darknet), .bin (OpenVINO). } {graph | | Path to a text file of model contains network configuration, It could be a file with extensions .prototxt (Caffe), .pbtxt (TensorFlow), .cfg (Darknet), .xml (OpenVINO). } {classes | | Path to a text file with names of classes to label detected objects. } {colors | | Path to a text file of indication that model works with RGB input images instead BGR ones (this is for segmenttation). } {scale | 1.0 | (OpenCV and OpenVino Platform) Preprocess input image by multiplying on a scale factor. } {image |<none>| Path to a image file for input data. } {video |<none>| Path to a video file for input data. } {camera |<none>| Use camera's frame for input data. } {conf | 0.7 | Confidence threshold. } {mask | 0.3 | Non-maximum suppression threshold. } {output_file | | Path to output file name. } {backend | OpenCV | Can be set OpenCV or OpenVino. } {target | CPU | (Optional) Choose one of target computation devices: CPU: CPU target (by default), GPU: GPU, GPU16: GPU using half-float precision. } {outlayer_names | | (Optional) Force to set output layer's name (use ',' to seperate). } ``` #### Pre-trained models * Tensorflow format (frozen_inference_graph.pb, maskrcnn_inception_20201008.pbtxt). * Inference Model Optimizer FP16 (CAR_16.xml, CAR_16.bin) * Inference Model Optimizer FP32 (CAR_32.xml, CAR_32.bin ### 2_WebApiServer #### Method * CarDamageDetection ``` POST /api/CarDamageDetection HOST: {your host name} Content-Type: application/json ImageData={any image format (ex. *.png, *.jpg, *.bmp, ...) from base64 encode} ``` Output: |ImageData|X|Y|W|H|Label|Score| |-|-|-|-|-|-|-| |Output image (.jpg format)|Top-Left X|Top-Left Y|Object rect width|Object rect height|Label name|The probability of classification| |```String```|```int```|```int```|```int```|```int```|```string```|```double```| Data structure in C#: ```C public class ObjectDetectionDetail { public int X { get; set; } public int Y { get; set; } public int W { get; set; } public int H { get; set; } public string Label { get; set; } public double Score { get; set; } } // end class public class OutputObjectDetection { public List<ObjectDetectionDetail> ObjectDetail { get; set; } public string ResultImageData; } // end class ```