GithubHelp home page GithubHelp logo

thepowerofswift / driver-assistant Goto Github PK

View Code? Open in Web Editor NEW

This project forked from daved01/driver-assistant

0.0 0.0 0.0 211.32 MB

A vision-based driver assistant for iOS.

Home Page: https://www.neuralception.com/object-detection-app/

License: MIT License

Swift 100.00%

driver-assistant's Introduction

Driver Assistant

GitHub

A computer vision-based driver assistant which highlights important objects such as stop signs, traffic lights, and pedestrians. Traffic lights and stop signs are displayed as icons for better visibility next to the current speed.

Disclaimer: We made this app as a demonstration for how object detectors can be trained on a custom dataset in PyTorch and deployed in an iOS app. Do not rely on this app for safety in traffic and keep your eyes on the road at all times. Local restrictions on the usage of cell phones behind the wheel might exisit in your jurisdiction.

Overview

When launching the app, the vision model runs and the speed is calculated with GPS sensor data. You can tap the screen to show and hide the settings button at the bottom of the screen.

App views for detection and settings

The app has the following features.

  • Detects 14 classes of objects
  • Highlights stop signs and traffic lights, including their indication states
  • Displays the current speed

By default, the app displays bounding boxes, labels, and the speed. In settings, you can enable or disable displaying any of those options.. In addition to these features, you can adjust the object detector’s IOU threshold and confidence threshold in the settings.

How to use

This app requires XCode to install. To get started, clone this repository, open the project with DriverAssistant.xcodeproj and build it. Then connect your iPhone and select your iPhone under "device" in XCode and install the app. Make sure you select a valid profile under Signing & Capabilities, otherwise the app won’t compile.

Implementation details

The following are details regarding the implementation. The figure shows the different steps and how they relate to each other.

Overview

Label data

For the project we generated COCO Traffic, a subset of the COCO dataset with the traffic lights relabelled with the indication states. The result is a dataset with 14 classes relevant to traffic scenes.

Developing the object detector

We use a yolov5s model which we trained for 75 epochs on the data. We did not evaluate the model on an independent test set which is why we don’t quantify the performance here.

Using a CoreML model in the app

This section is for those interested in modifying the app.

Exporting the YOLOv5 model into CoreML

Although there is an export function provided by Glenn Jocher and the YOLOv5 team, the trace function used in it does not export many of the post-processing steps such as adjusting the coordinates to be relative to the image rather than the grid cell. Fortunately, Leon de Andrade and Dennis Post (Thank you very much) have provided a repo to export the YOLOv5 model with all of these post-processing steps here.

We have used their repo to export our model with some minor modifications. An older version of YOLOv5 (v4.0) has been provided with this repo for your convenience. The following instructions are based on the original repo by Leon de Andrade.

To export the model into CoreML, install poetry. Poetry is used to install the required libraries to export the model. Export it by navigating to the export/yolov5-coreml-tools folder and then using the following command

$ poetry install

CoreML tools only works for certain versions of PyTorch, so the following commands may be preferred

$ pyenv install 3.8.6
$ pyenv global 3.8.6
$ poetry install

In the src/coreml_export/main.py folder, you may want to change some of the variables such as

  • classLabels -> A list of the names of the classes. In COCO, there are 80 classes.
  • anchor -> This depends on the YOLOv5 model that you are using (x, m, l, xl). This can be found in the "yolo.yml" file
  • reverseModel -> Some models reverse the order of the anchors and strides, so this is used to quickly switch reverse their order.

Then you may paste your .pt network model in the yolov5-coreml-tools folder. To finally run the export program, you may use the command

$ poetry run coreml-export --model-input-path <path to .pt file>

And you can use the -h flag to get a list of the optional arguments for your export. The model will save your exported model in the output/models folder.

Integrating the model into Swift

Once the exported model has been added to the project, you have to call it with the VNVisionRequest.

Apple provides an example for an object detection app. To use it with your own model, you might have to adjust the geometric transformation. For more details on these transformations see here.

driver-assistant's People

Contributors

daved01 avatar phil-hoang avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.