my blog my blog

Category: Allgemein
Semantic segmentation for automotive scenes: ENet

In order to be safe, reliable and fast, autonomous cars need to be able to perceive their environment and react accordingly.

Simulating robots with MORSE

It is quite challenging and costly to build up a robot lab, especially if you just want to conduct some experiments with sensors and a moving platform. In todays search of affordable robot platforms, I discovered MORSE, a simulation platform built on the blender game engine ( This article will show how to set it up, select an environment, add sensors and read from them.

It already has the infrastructure, several environments and pre-built robots, sensors (camera, GPS, laserscanner, IR, etc.) and actuators to play with, and it can be installed directly via apt (Ubuntu + Debian). It took me less than an hour to skim through the tutorials, set up a basic environment, add a laser-range sensor to an existing robot and visualize the results, pretty amazing! (You can find all of my project files here:



[Kaggle] Minority Report, or the San Francisco Random Forest Precog

I had a little free time on my hand and decided to quickly complete the coursera-course „Data Science at Scale – Practical predictive analytics“ of the University of Washington by Bill Howe. The last assignment was to participate in a kaggle competition.


For this assignment I chose the „San Francisco Crime Classification“ challenge. The task is to predict the Category of a crime given the time and location. The dataset contains incidents from the SFPD Crime Incident Reporting system from 2003 to 2015 (878049 datapoints for training) with the following variables:

Smarter smartmirror

So I also decided to build myself a smartmirror. However, I want it to provide a little more functionality than just displaying some information and telling me that I’m beautiful. Here is the finished build:

Bathroom SmartMirror With LeapMotion


And here is a video of the leap-motion-control in action:


I want to place it in my bathroom, because that’s the only place where I actually spend some time in front of the mirror. I do want some controls, but I do not want to touch buttons or the mirror itself, so I chose a leap motion controller. Below I will detail some of the steps I went through in building this thing.

LW12 Protocol and Python Package

For my new flat I wanted controllable RGB LED stripes. Problem is, most of the controllable cheap ones only have IR remotes, so the receiver must be in line of sight of the remote somehow. That has several drawbacks: you cannot install it behind some furniture without the receiver sticking out, and synchronizing across several rooms is hard.

My solution was to pick some of the RGB LED WiFi controllers (LW12). These come with a neat Smartphone-App to control them.

However, I wanted to control them with my own home-automation-system, or my own smartphone-app.

SICK PLS 101-312, Python and Linux

After fiddling around with some ultrasonic sensors for S.A.R.A.H. (my home automation system), I was looking for other options. Thanks to ebay, industrial laserscanners are now an option 🙂
In this article I will describe how I connected the scanner with a regular PC, got the password, and provide a python-class that is able to communicate with the scanner and produce nice cv-images (and a numpy-array containing the measurements).

I payed 80 bucks for this used SICK laserscanner in the bay: the PLS 101-312.



Lane detection

Today I will try to detect some lanes..

– We know the lane-width (plus minus)
– We are inside the middle of a lane
– We know the camera geometry
– Based on the turnrate of the IMU we can estimate the curvature of the street
– A line in pixels can be detected by a upward flank and a downward flank

Here are some exemplary results:

1) Of course, the best one first 😉

Training Cascades to detect cars

I spent some time on training several cascades to detect cars in ego-view automotive videos,
and will now document what I’ve learned.

I will use the existing OpenCV-tools.

Data preparation
-> pos/ 1000 images containing the desired object
-> (containing the filenames of the objects, number of objects in the frame and bounding boxes in the format x,y,width,height)
-> neg/ 2000 images that do not contain cars at all
-> negs.txt text-file containing the filenames of all negative images

For the positive images I used tight bounding boxes. You actually do not need as many negative images as you want to use negative samples later on, as the training-script will sample patches from the negative images given, so it can actually be less images than negative samples.

Some of the positive images, the bounding-boxes have been annotated by hand (ground-truth-data):





BCCN 2015 Poster

We presented our poster at the BCCN conference 2015 in Heidelberg. It describes our system platform and a first case study of brakelight detection.

[pdf height=“950px“][/pdf]