Table of Contents
- General, Domains & Overview
- Detailed Description
- Programming Languages
- Past experience with Libraries, Frameworks and Specific Technologies
General, Domains & Overview
- Data Science, Artificial Intelligence (AI), Machine Learning, Deep Learning.
- Computer Vision
- Research and Development (R&D).
- Digital image & video analytics and processing.
- Software Engineering, Development, Architecture.
- Leadership and Management including leading and managing teams of researchers, software engineers, data scientists, etc.
- Applications of technology, Machine Learning, AI, and Computer Vision to different domains such as business and industrial problems, human welfare, and software systems.
- Mentoring, conducting training, lecturing and teaching.
- Problem solving, planning, strategizing, critical analysis & thinking
- Effective presentation and communication with different types of audiences.
- Professional writing and publication of journal and conference papers, documents and books.
Over 13 years of experience, in Data Science, R&D, Computer Vision, Machine Learning, Deep Learning, Artificial Intelligence (AI), and Software Engineering. Domain knowledge in AI and Computer Vision, and possesses analytical/statistical skills, data science/engineering skills, and software engineering skills, knowledge and experience.
Interested and experienced in commercial AI-related R&D and Software/Product/Service development from conception, design, formulation, implementation and execution until deployment, across all levels of individual contribution, team-work, management and leadership.
In addition, skilled and experienced with many programming languages, especially C & C++ (including in-depth knowledge, memory management, close-to-hardware, optimizations, modern C++, pure C/C++ modules), implementing optimized/fast custom codes and libraries, and higher level languages such as Python and Java. Also experienced in C, C++ and Python, including C/C++ APIs of underlying engines of Python, Java and C#, and communicating back-and-forth (extending and embedding) between different programming languages to develop highly optimized deployed systems that require multiple programming languages (including C/C++ dynamic libraries).
Experienced in architecture, implementation and delivery of professional AI, Computer Vision and Machine Learning SDKs, applications, APIs, services, reference implementations, demos, prototypes, reports, analytics, etc.
Experienced in many different (senior) roles in making individual contribution, research, engineering, leadership, management, mentoring, lecturing, teaching, publication and presentation.
Hard and soft skills, language and communication, and formulating solutions, and explaining and presenting them to different types of audiences. Experienced in both industry/business and in academia.
Constant self-improvement; business; entrepreneurship; freelancing; self-employment; solving important problems in life; and developing & creating things that will be useful as many people as possible.
Note: Open to opportunities, projects, collaborations, consulting, gigs, conducting trainings, giving talks, etc. If we have mutual interest and benefit, feel free to contact me for further discussion.
- C (advanced level)
- C++ (advanced level)
- Python (advanced level)
- Java (advanced level)
- MATLAB (advanced level in the past; haven’t used for a long time)
- C# (intermediate level in the past; now rarely used)
- SQL (intermediate level)
- R (have used in projects, but abandoned it long time ago in favor of Python).
- Cython (intermediate level)
- LaTeX (intermediate level)
- Windows Batch script (intermediate level)
- HTML + CSS (basic working level)
- Prolog (basic working level)
- PHP (used professionally for some time; after that, no longer used)
- Go (only learnt for fun; not used after that)
- Julia (only learnt the basics for fun; not used after that)
- Nim (only learnt the basics for fun; not used after that)
- D (only learnt the basics for fun; not used after that)
- Zig (only learnt the basics for fun; not used after that)
Programming IDEs used
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++)
- 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
- 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++
- MALLET (Java) for topic modelling and graphical models
- 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
- FileZilla client and FileZilla server
- Postman for testing web APIs
- Jabref: managing bibtex (.bib) databases.
- Anaconda (Python distribution)
- Making web sites.
- Video conferencing: Skype, Zoom
- 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.