../

Feedback I received after training neural networks for clients to embed into their commercial C++ applications:

Client's Feedback To You
Five Stars!
Pure Genius. Stephane and his tools DarkHelp and
DarkMark are the best thing that happened to us
and helped us take a leap into deep learning .. He
knows the details and he documents things in a
crisp and clear manner. Very wonderful to work
with, always available and informative ... He went
beyond the scope of the project to make sure we
got everything working on the hardware we
wanted... Highly recommended!
Five Stars!
Very knowledgeable and responsive AI/ML engineer, very
professional, a pleasure to work with. Would love to work
with him again!

The tools I use to train and embed artificial neural networks into C++ applications are Darknet[1], DarkHelp[2], and DarkMark.

Project Notes Samples Images
DarkPlate DarkPlate is a C++ project for reading license plates. It uses Darknet/YOLO, DarkHelp, and OpenCV to find and parse vehicle license plates.
MoveDetect MoveDetect is a C++ library to detect movement between frames in a video. It is very low impact, designed to run on tiny devices such as Raspberry Pi, Beaglebone, and Jetson Nano.
Pharmacy A neural network trained to detect and count different kinds of pills. Works even when pills are on their side or stacked, and can highlight broken pills.
Fire What if we could train our home and business security cameras to detect certain things like fire and contact us when those events are detected?
Sudoku Using a YOLOv4-Tiny neural network to take apart a Sudoku, and then extracting the parts from the image using OpenCV to find the solution.
Counting Objects Counting wooden dowels on a conveyer belt.
Stop Signs A detailed stop sign tutorial I wrote on how to get started with Darknet, DarkHelp, and DarkMark.
To help people get started with Darknet and DarkMark, I also recorded a video showing how to do the stop sign tutorial.

Click on the image above to view the gallery, or click below to view on Youtube.
Driving Recognizing vehicles, bicycles, and pedestrians.
  • DarkHelp has new support for annotating videos, not just JPEG and PNG files.
  • This video was done as a demonstration of applying a neural network to video files. All from within C++ using a dozen lines of code and a library that is ~300 KiB in size!
  • The option to display the processing time of each frame was enabled. In this video, you can see in the upper-left corner that each 1280x720 frame took 2 milliseconds to process. This gives a possible frame rate of ~500 FPS when processing videos offline.
Cancer Cells Custom artificial neural network trained to recognize 15 different types of cancer cells:
  • Basophil
  • Eosinophil
  • Erythroblast
  • Lymphocyte (atypical)
  • Lymphocyte (typical)
  • Metamyelocyte
  • Monoblast
  • Monocyte
  • Myeloblast
  • Myelocyte
  • Neutrophil (band)
  • Neutrophil (segmented)
  • Promyelocyte
  • Promyelocyte (bilobled)
  • Smudge cell
Image source: A Single-cell Morphological Dataset of Leukocytes from TCIA (The Cancer Image Archive).

Click on the image to view the gallery.
YOLOv3 and YOLOv4 Comparison between the following 4 neural networks configurations:
  • yolov3-tiny.cfg (2 layer)
  • yolov3-tiny_3l.cfg (3 layer)
  • yolov4-tiny.cfg (2 layer)
  • yolov4-tiny-3l.cfg (3 layer)
This video compares images from 4 similar neural networks, all trained the exact same way.
Mailboxes Custom artificial neural network trained to recognize 17 classes related to Canada Post mail boxes:
  • numbers 1 to 16
  • lock
Image source: self.

Click on the image to view the gallery.
Handwashing Handwashing recognition using a neural network.
  • Each frame takes a decent GPU between 1 and 2 milliseconds to analyze, allowing video to be processed at > 300 FPS when taking into account Darknet and OpenCV overhead.
  • Neural network and C++ library is built using Darknet, YOLOv3-tiny, DarkMark, and DarkHelp C++.
  • See the open-source C++ handwashing library I published for details.
Street Signs Custom artificial neural network trained to recognize 5 classes related to common street signs:
  • stop sign
  • yield sign
  • street name
  • speed limit
  • back of stop sign
Image source: self.

Click on the image to view the gallery.
Prairie Dogs
  • I had to train a neural network to find prairie dogs for some tests I was doing with OpenCV's CSRT object tracking.
  • The tests were not successful, but the neural network remains.
Store Price Labels Custom artificial neural network trained to recognize 12 classes related to price tags:
  • digits 0 to 9
  • barcode
  • description
Image source: self.

Click on the image to view the gallery.
CSRT Tracking
  • I looked into adding CSRT object tracking into DarkMark.
  • Interesting results, but I'm not convinced there would be any benefit to add full support for CSRT to DarkMark.
Dog Versus Cat Custom artificial neural network trained to recognize just 2 classes:
  • dogs
  • cats

See also: Dogs And Cats, a post I wrote with some interesting results during the training of this neural network.

Image source: Kaggle "Dogs and Cats" project.


Click on the image to view the gallery.
Video Custom artificial neural network trained to recognize 7 different classes, which is then applied to a video stream:
  • eye, nose, mouth, ear, bottle, blue pen, orange pen
YOLOv3 neural network was trained using the Darknet framework.
  • Training (10K iterations) took 1.5 hours. Weight files are 33 MiB in size.
  • Video capture and neural network image processing is written in C++.
  • In this video, it is running in a VirtualBox VM without a GPU at ~7 FPS.
Iranian Plates Automatic number-plate recognition (aka ANPR, ALPR, VLPR) for Iranian license plates.
Click on the image to view the gallery.

See the series of posts I wrote on building your own neural network. And don't miss the tutorial on how to get started with Darknet, DarkHelp, and DarkMark.

I am available for hire. Please email me if you want to discuss your specific neural net requirements.

Last modified: 2021-04-18
Stéphane Charette, stephanecharette@gmail.com
../