Expertise

Table of Contents

  1. General, Domains & Overview
  2. Programming Languages
  3. IDEs
  4. Past experience with Libraries, Frameworks and Specific Technologies

General, Domains & Overview

  • Computer Vision, Machine Learning, Deep Learning, Data Science, Artificial Intelligence (AI).
  • Digital Image & video analytics and processing.
  • Research and Development (R&D).
  • Software engineering, development, architecture.
  • Lecturing, teaching and conducting training.
  • Applications of technology, Machine Learning, AI, and Computer Vision to different domains such as business and industrial problems, human welfare, and software systems.
  • Leading and managing teams of researchers, software engineers, etc.
  • Problem solving, planning, strategizing, critical analysis & thinking, effective presentation, communication, management and leadership.
  • Professional writing and publication of journal and conference papers, documents and books.

Programming languages

  • C (advanced level)
  • C++ (advanced level)
  • Python (advanced level)
  • Java (intermediate level)
  • C# (intermediate level)
  • Cython (intermediate level)
  • LaTeX (intermediate level)
  • Batch script (intermediate level)
  • Prolog (basic working level)
  • HTML + CSS (basic working level)
  • Javascript (basic familiarity)
  • Go (only learnt for fun; not used after that)
  • Julia (only learnt the basics for fun; not used after that)
  • PHP (used professionally for some time; after that, no longer used)
  • MATLAB (used to use quite a lot; and after that no longer used)

Programming IDEs used

  • Visual Studio (for C, C++, C#)
  • PyCharm (for Python)
  • Spyder (for Python and Cython)
  • Visual Studio Code
  • Intelliji IDEA (for Java)
  • Notepad++ (for making notes, and browsing, reading source codes in many different programming languages)
  • TeXstudio (for LaTeX and professional document writing)
  • TeXworks (for LaTeX and professional document writing)
  • WinEdt (for LaTeX and professional document writing)
  • Custom IDEs and scripts programmed/developed/written on my own for my personal use

Past experience with Libraries, Frameworks and Specific Technologies

  • Custom formulation and architecture of Machine Learning and Deep Neural Network models and algorithms, and training them completely from scratch, to solve client/business problems that cannot be solved with publicly available models, datasets, and/or systems.
  • Custom solutions, custom data collection, custom data annotations (using in-house tools) and pre-processing pipelines and custom formulation of Machine Learning models, training them and deploying them.
  • Combination of different Machine Learning and Deep Learning models and algorithms.
  • Many different kinds of feature extraction algorithms applied to image and video data, including fixed manual feature engineering and learnt Convolutional Neural Networks.
  • Training different types of Machine Learning and Deep Learning models.
  • Porting, packaging and deploying different types of Machine Learning and Deep Learning models.
  • Deploying deep networks trained in Python in C++, by using C++ libraries, writing custom C++ code for neural network forward propagation, etc.
  • Object detection (including face detection, head detection and pedestrian detection).
  • Human activity recognition.
  • Face recognition.
  • Face biometric classification (such as age, gender and ethnicity).
  • People & head counting from top-down or near top-down cameras.
  • Transfer Learning and Domain Adaptation.
  • Combination of Machine Learning and Software Engineering.
  • OpenCV (C++, Python, Java)
  • Dlib (C++, Python)
  • Qt (C++)
  • PyQt
  • Numpy, Scipy, Matplotlib, scikit-learn, scikit-image, Pillow
  • Pytorch, Tensorflow
  • SQLAlchemy Object-relational mapping (ORM)
  • Using Cython and pybind11 to (1) make high performance Python extensions in C/C++ to be called from Python and (2) embed Python in C/C++.
  • Using Simplified Wrapper and Interface Generator (Swig) to call C/C++ libraries from different programming languages, and in particular, Python.
  • Making high-performance optimized C/C++ libraries and wrapping them in higher-level languages such as Python to create SDKs.
  • Developing, packaging, and deploying C++ libraries wrapped with pure C interface.
  • Embedding Python interpreter in C++, for use in larger C++applications.
  • Making standalone packages with either pure C/C++, or mixed C/C++ and Python with all the dependencies inside the package/folder for easy deployment.
  • Wrapping C++ libraries in C interface and calling from LuaJIT using its very fast built-in FFI.
  • Making pure C/C++ Computer Vision and Machine Learning SDKs to be called from other programming languages.
  • Porting source codes for Computer Vision and Machine Learning written in higher level languages such as Python to C/C++.
  • Java Native Interface (JNI) and interfacing C/C++ code and libraries with Java.
  • Python CFFI, ctypes, numba, multithreading and multi-processing.
  • C# P/Invoke to call native C/C++ dlls from C#.
  • CGo for calling C libraries from Go.
  • Microsoft Azure Portal
  • Microsoft Azure Cloud Computing platform Virtual Machines and making AI Servers and AI Systems using REST API
  • Microsoft Azure SQL Server and database
  • Flask (Python) for web services and APIs
  • Microsoft Office: Word, PowerPoint and Excel
  • Cling: the C/C++ interpreter for rapid prototyping testing of C/C++ dlls
  • JSON file format, parsing, serialization and deserialization
  • Web applications (more focused on back-end REST API)
  • Eigen C++ matrix library
  • Armadillo C++ matrix library
  • VLFeat
  • Piotr’s Image & Video Matlab Toolbox
  • Matlab Software by Mark Schmidt and his students, including various optimization functions such as LBFGS and Graphical models.
  • Embedding MATLAB Engine in C/C++.
  • Wrapping C/C++ with MATLAB  C-API to produce MATLAB Mex shared libraries callable from MATLAB.
  • LIBLINEAR — A Library for Large Linear Classification
  • LIBSVM — A Library for Support Vector Machines
  • Sparse Bayesian Models (and the RVM) by Mark Tipping
  • FLANN: library for performing fast approximate nearest neighbor searches in high dimensional spaces
  • Boost C++
  • MySQL
  • SQLite
  • MALLET (Java) for topic modelling and graphical models
  • JQuery
  • Bootstrap CSS
  • Oracle VM VirtualBox
  • Windows Remote Desktop and TeamViewer for using and managing dozens of PCs, small-form computers for embedded systems, etc.
  • CamStudio and DVDVideoSoft Free Screen Recorder for recording and making technical, scientific, presentation and communication demo videos
  • CMake
  • FileZilla client and FileZilla server
  • Postman for testing web APIs
  • Jabref: managing bibtex (.bib) databases.
  • MikTex
  • Anaconda (Python distribution)
  • FFmpeg
  • Video conferencing: Skype, Zoom
  • www.projectmanager.com
  • Trello
  • G Suite – Gmail, Docs, Drive, Calendar, etc. for business/professional use
  • Google chat for business communications
  • Dynamic generation HTML code from Python and Java as part of an AI back-end system to produce scientific and commercial analytics reports.
  • Java libraries such as spark and javalin to make rest APIs in Java as part of a broader Computer Vision and Machine Learning web application.
  • Doxygen automatic documentation generation for C/C++.
  • Using Jupyter Notebook, Python and HTML with Python code, explanations, HTML code, videos, images, plots, etc. to create R&D documentations and tutorials for software engineering teams, and for people who may not be familiar with Computer Vision and Machine Learning.
  • Training custom deep networks with Tensorflow/keras, Dlib C++ library for object detection, face detection, face recognition, etc.
  • Raspberry Pi 3 Model B+, and Camera module; creating and deploying C++ Computer Vision applications for Raspberry Pi, as part of the application, compiled dlib C++ library, and OpenCV C++ library for ARM CPU architecture and for Raspbian OS. Also included some Deep Learning code.
  • Tiny C Compiler and libtcc to dynamically generate C code and compile it during run time (like a home-made JIT).
  • dyncall C library to build C function pointers dynamically at run time to call functions from DLLs after dynamically loading them. Normally after dynamically loading DLLs and to call the functions contained therein, we need . This approach was used when I wrote my own programming language and interpreter (called “kkh interpreter”) that allows embedding C functions or C++ functions (with a C interface) anywhere inside the code (of the kkh interpreter programming language).  In the background during run-time, the system automatically compiles all C/C++ functions that the user embed using libtcc or mingw64 to DLLs and automatically load them immediately to the make those functions available. Thus, the “kkh interpreter” can also be treated as a C or C++ interpreter or Just-In-Time (JIT) compiler which makes very useful to  develop large C/C++ codebases/projects/products especially involve big-data processing, since each component/function can be developed one-at-a-time and all the variables held in RAM and you don’t have to re-compile, re-run and serialize variables and memory to hard disk and then deserialize/re-load them into the memory. In fact, using the approach combined the power of both C/C++ and scripted/interpreted languages such as Python.
  • Mingw-w64 – GCC, C and C++ compilers for Windows 64 & 32 bits.
  • Cygwin – to compile and run C/C++ sources, projects, etc. written for Linux (using POSIX API, libraries, etc.) on Windows. Cygwin provides a library/layer that translates Linux OS APIs/calls to Window OS APIs/calls.