Cong Gao
Ph.D

CW308.11
Department of Computer Science
University of Regina
Email: cgao at uregina.ca
Tel: +1(306)585-5695

| Home | Research | Teaching | Awards | Projects | Curriculum Vitae | News |


I have been devoting to some open source projects (since 2009) and I am pleased to share my creations and ideas to students, friends, and anyone. Some selected projects are listed as follows.

  • tflm-for-3DS - tflm-for-3DS is a project aims at porting tensorflow lite micro to Nintendo 3DS. It is open sourced on Github, and the repository mainly includes the tensorflow lite micro library, i.e., tensorflowlitemicro_lib and adapted examples (currently only has tflm_hello_world) for 3DS. Examples are going to be ported to 3DS as well, while currently the hello world example which demonstrates the sine wave fitting has been fully ported. The following is a picture taken when the example was running on a real 3DS hardware. I've also written an article tutoring how to build tensorflow lite micro for 3DS.


  • LLDA - LLDA stands for Lie group Linear Discriminant Analysis, proposed in my paper Pattern Recognition based on Lie Group Covariance Feature. LLDA is an algorithm which combines the idea of my LieFisher and images' covariance feature for pattern recognition. This approach utilizes the fast and accuracte computation of sample mean from semi-positive matrix group and solid idea of LDA. It provides a extendable and good performance for recognition and possible visual tracking. Code is implemented in Python and can be downloaded here.


  • A3WD - A3WD stands for Actionable strategis in 3-Way Decisions, introduced in may paper Actionable strategies in three-way decisions. There are four models in A3WD, in which two models find the bounds of cost and benefit, the other two models search for maximum benefit under limited cost and minimum cost for obtaining a desired benefit. The package includes the code of four proposed algorithms for these models together with experimental results and several preprocessed data sets (UCI data sets). The code was implemented in Matlab. Recently, A3WD has been attracting many people's attention, so this package is a good start point if you want to use this method in your research or applications. Download: A3WD.


  • DTRS - DTRS stands for Decision-Theoretic Rough Sets, introduced by Dr. Yiyu Yao. The conditional probability, i.e., Pr(X|[x]) in the provided package was implemented in Naive Bayes method. The provided code with demo (UCI breast cancer classification) was implemented in Matlab. Download: DTRS.


  • RCAS - RCAS stands for Reduct Construction based on Addition Strategy. It is a Matlab implementation of the algorithm proposed in my paper An addition strategy for reduct construction. Generally, attribute reduct constructed based on addition strategy algorithm will have less attributes than other existed methods (deletion method and addition-deletion method). Therefore, in big data situation, it is significantly space friendly. In some cases when data has hundreds, even million attributes, such as DNA sequence reduction, this method is faster than other existed methods. In the package, I also provided implementations of other algorithms and some experimental comparison results. Download: RCAS.


  • LieFisher - LieFisher is an algorithm I designed for classification based on Lie group and LDA. It was proposed in my paper Research on Lie group means learning algorithm. Due to some reasons, the data in the real application may not distribute in Euclidean space, sometimes in a manifold or Lie group. Therefore, most machine learning algorithms cannot handle such problems properly. LieFisher analyzes objects in manifold space and search for a geodesic via Lie algebra for classification. Another obvious advantage of LieFisher is that objects have matrix form (e.g., image is a matrix of intensities) can be directly handled without conversion to vector form, and such conversion commonly loses information. The code and demo were implemented in Matlab. The package includes two types of LieFisher, KLieDA, and KLieSVM programs and demos. Download: LieFisher, KLieDA & KLieSVM.


  • KLieDA & KLieSVM - KLieDA is an algorithm I designed for classification based on Lie group, kernel function, and LDA. KLieSVM is an algorithm similar to KLieDA but uses SVM instead of LDA. They were proposed in my paper Research on Lie group kernel learning algorithm. Five kernel functions for data distributed in Lie group and manifold space were designed. The code and demo were implemented in Matlab. The package includes LieFisher, KLieDA, KLieSVM programs and demos. Download: KLieDA, KLieSVM & LieFisher.


  • Gater8 - An 8-bit homebrew CPU I designed for undergraduate students who take CS 201 / CS 301 course. The purpose of this project is to help students to well understand the principles of computer organization. It was designed by 7400 series gate chips. Gater8 has 12-bit address bus, 8-bit data bus, and 11 instructions. It has a semi-harvard and semi-von neumann architecture. The design was completed and tested in LogicWorks 5. It is now under assembling by real 7400 chips. The source files can be downloaded here: Gater8. Two introduction articles can be found here (in Chinese): (1), (2).


  • Suzhou Bus GPS Data Preprocessing - This is a program I wrote for Suzhou Bus GPS Data Mining project. This program processes the raw bus GPS data that are organized in XML-like text files, but with missing values and inprecise format. Due to the huge size of single data file (larger than 10 Giga Bytes), many softwares (e.g., Excel) cannot handle the data. The program was implemented in VC++ with ADO (ActiveX Data Objects), it analyzes the missing values and converts encoding (between GB2312 and UTF-8), stores the processed data into data base for further use.


  • BPNN - The BPNN is a C++ class of BP neural networks(implemented for 3 layers). This class has many useful functionalities, such as persistence (save and read trained weights into file). In the package, I also provided an ActiveX control to display pgm format image and an ATL/WTL based face recognition demo. This project can be adapted for artificial intelligence class for senior undergraduate students and graudate students. Download: BPNN.


  • Nomad3D - Nomad3D is a platform-independent and software-rendered (without using GPU) 3D graphics engine. It is a simple and reduced engine. It includes some interesting functionalities, such as pictures in picture and efficient lighting system. It can be easily ported to several platforms, such as Win32, Linux, Nintendo DS, Sony PSP, Android, iOS, and embedded systems. The main programming language is C++.


  • DSduino - DSduino is an Arduino + BASIC extension for Nintendo DS via DS's slot 1 SPI interface. It enables Nintendo DS to manipulate sensors or to control some electronic items. I also ported and extended a BASIC interpreter to DS, which allows you to write BASIC programs on DS to communicate with Arduino and transmit data between them. Additionally, those programs can be saved to DS's flash card (e.g., SuperCard) or loaded from the card. Due to the powerful functionalities of NDS (WIFI, 2 ARM CPUs, touch screen, 2 TFT screens, and microphone), this solution can be used to create a wide class of applications.


  • NomadGB - NomadGB is a multi-platform Nintendo GameBoy emulator that I programmed since 2009. It supports Windows, Nintendo DS, Nintendo 3DS. I added a feature, i.e., dynamic memory bank allocation for NomadGB, such functionality allows this emulator to run on hardware limited devices (e.g., Nintendo DS). Current version does not support sound. Download: here.


  • NomadSwan - NomadSwan is a WonderSwan / WonderSwan Color emulator for Nintendo 3DS. The WonderSwan was designed by Gunpei Yokoi (known for GameBoy creator) and released by Bandai in 1999. This emulator was implemented based on Oswan 1.7.3. I also customized stdio printf function to 3DS' LCD screen for displaying content of SD card (to list ROM files). To my knowledge, NomadSwan is the first WS/WSC emulator on 3DS.

  • NomadOS - NomadOS is an operating system for ARM. I started programming it in 2013 based on gcc toolchain. It is not finished yet, but I have finished the linkscript for ld, bootloader, printf function for debug, memory management, interrupt hanlder, I/O driver interface, highly efficient memset function, and so on. I started and experimented NomadOS on Nintendo DS. Due to the lacking of documentation of the third-party flash cart, the file system module has not finished yet. The next step is porting it to generic ARM platforms (ARM v7 and above), adding process (thread) management, and supporting file systems (FAT32, ext3). Download the source code and binary files: here.


  • GWatch - GWath is a prototype of smart watch I created in 2013. At that time, there was no smart watch on the market except for Pebble. It was designed on an STM32F4 discorvery board (this board just came out on the market in that year). I ported FreeRTOS 7.5.2 (newest version at that time) for it, added an RTC module for time, Bluetooth for communication with cell phone and computer, and an 12864 OLED as the screen.

  • Car-based Robot - This is a car-based robot I made in 2013. It was created by Arduino and Raspberry Pi, featured with video feedback (with image processing) and a controlling iOS / Android app. The robotic arm can be controlled by Wii remote controller, the video and controlling communication are implemented by customizing an open source software "mjpg-streamer". The video and control share one TCP/IP connection, which is more securer than most quadrones on the market. This robot project was adopted by a company in Suzhou.

  • A drone controlling app - This is an iOS / Android app for controlling drone. It features video feedback, voice communication, and gyro sensor controlling. It was designed and developped for an IoT company in Beijing.


  • Weaving Progress Planning (WPP) - It is an intelligent planning system for weaving workshops. I designed and programmed it for the Shinejit ERP. It was developed for planners who have to dispatch hundreds even thousands of cloth-weaving tasks a day to variaty of weaving machines. WPP deals with different tasks have different requirements such as different ODT (Order Delivery Time), different lenth of cloth, and different weaving difficulties, and the capabilities of weaving machines vary, not every machine can produce all kinds of cloth. WPP analyzes these information and can automatically dispatch (and split if needed) tasks on to different machines to obtain the approximately optimal solution. WPP provides the interactive Gant-like GUI to users for viewing and manually changing generated weaving tasks. Every task is graphically shown as a bar and can be moved from a date to another and / or from a machine to another. This sotfware has been using by one of the biggest textile company, Youngor, in China.

  • Knitting Progress Planning (KPP) - KPP is an intelligent planning system for knitting workshops, it has similar GUI and interaction as WPP. I designed and programmed it for the Shinejit ERP. The knitting cloth has different manufacturing procedure, different knitting machine properties, and yarn requirements. Therefore, KPP has a different business logic compare to WPP. This sotfware has been using by one of the biggest textile company, Youngor, in China.

  • Woven CAD - This is a CAD software for designing weaving cloth. I designed and developed (finished about 80% when I resigned from company) it. It supports yarn design, weaving pattern design, cloth simulation for the first version. Some advanced features such as realistic cloth simulation on predesined 3D human-body, weaving pattern designed from scanned cloth sample were also designed and planned. This product was designed and implemented based on Component Object Model (COM), the yarn design module, weaving pattern design module are implemented in COM midware (I used VC++ and ATL), and they can be used in other programming languages, or applications such as IE browser.

  • Marvelous SIP - Marvelous SIP is a mobile municiple information portal for SIP (Suzhou Industry Park), it is the first mobile information portal for city in China. It consists of a set of apps on iOS and Android, and provides convenient online service via mobile device for citizen in Suzhou. I was the project manager of this project and also programmed the iPad app for it. The following screenshots were taken from iPad emulator when I was coding.