Code Monkey home page Code Monkey logo

augmented-reality's Introduction

augmented-reality

Augmented reality card based application with Python, numpy and OpenCV

Usage

  • Place the image of the surface to be tracked inside the reference folder.
  • On line 36 of src/ar_main.py replace 'model.jpg' with the name of the image you just copied inside the reference folder.
  • On line 40 of src/ar_main.py replace 'fox.obj' with the name of the model you want to render. To change the size of the rendered model change the scale parameter (number 3) in line 103 of src/ar_main.py by a suitable number. This might require some trial and error.
  • Open a terminal session inside the project folder and run python src/ar_main.py

Command line arguments

  • --rectangle, -r: Draws the projection of the reference surface on the video frame as a blue rectangle.
  • --matches, -m: Draws matches between reference surface and video frame.

Troubleshooting

If you get the message:

Unable to capture video

printed to your terminal, the most likely cause is that your OpenCV installation has been compiled without FFMPEG support. Pre-built OpenCV packages such as the ones downloaded via pip are not compiled with FFMPEG support, which means that you have to build it manually.

If you get the error:

Traceback (most recent call last):
File "src/ar_main.py", line 174, in
main()
File "src/ar_main.py", line 40, in main
obj = OBJ(os.path.join(dir_name, 'models/fox.obj'), swapyz=True)
File "[...]/augmented-reality/src/objloader_simple.py", line 16, in init
v = v[0], v[2], v[1]
TypeError: 'map' object is not subscriptable

The most likely cause is that you are trying to execute the code with Python 3 and the code is written in Python 2. The map function in Python 3 returns an iterable object of type map, and not a subscriptible list. To fix it, change the calls to map() by list(map()) on lines 14, 19 and 24 of src/objloader_simple.py.

Update: This should no longer be an issue after this commit

Explanation

See this blog entries for an in-depth explanation of the logic behind the code:

Results

augmented-reality's People

Contributors

juangallostra avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

augmented-reality's Issues

How to display the texture of 3Dmodel?

thanks for your work!
Now i get a question:
Is a single color space covering the texture of the model? Or should we combine the MTL file to display the texture of the model?
thanks !

Size of loaded model and textures

I tried loading a few models of my own but the loaded models are extremely tiny while models you have provided are of the perfect size. Is there any way to overcome this? Also, how do you go about loading textures?

Attaching a model that has this issue:
dna.zip

An error occurred when running ar_main.py. How to resolve it

matches = bf.match(des_model, des_frame)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

cv2.error: OpenCV(4.9.0) D:\a\opencv-python\opencv-python\opencv\modules\core\src\batch_distance.cpp:275: error: (-215:Assertion failed) type == src2.type() && src1.cols == src2.cols && (type == CV_32F || type == CV_8U) in function 'cv::batchDistance'

error: unrecognized arguments:

I am getting this error any idea, please?

usage: ipykernel_launcher.py [-h] [-r] [-mk] [-fk] [-ma]
ipykernel_launcher.py: error: unrecognized arguments: C:\Users\Wooks\AppData\Roaming\jupyter\runtime\kernel-6769bc09-1f3c-4e3a-89c1-35e83a077bea.json
An exception has occurred, use %tb to see the full traceback.

SystemExit: 2

C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py:2971: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)

Dimensions of a card

Hi,
The code is great. While running this the issue I am facing is the objects keep jumping around and do not stay on the reference surface. I am using the webcam. I am i doing something wrong. I am still not sure if the dimensions of the card or the surface of the card is the problem. Kindly let me know.

Split requirements file

Currently the requirements file includes all the dependencies required to run both the AR app and the data visualization app. Furthermore, some of the data visualization dependencies are quite heavy (Flask, Plotly or Dash).

I think it makes sense to split the requirements in two parts (AR on one side and data visualization on the other side) so that users who only want to tinker with the AR code don't install packages that will not be used.

Additional info: Customize a requirements.txt for multiple environments

Standard size of the model image and video ?

Hi,
When i run this code on a standard visiting card, it is not quite able to recognize it. The video is not input via webcam, but pre recorded and input using cv2.VideoCapture() . Is there a set dimension of image or something ?
Thanks!

Track reference surface

Description

Instead of performing only detection on each individual frame, take into account the information from previous frames to track the reference surface and reduce jitter.

Approaches to test (or include):

  • Mean filter
  • Kalman filter

Migrate to Python 3

Description

Code is written for Python 2.7, but it is quite straightforward to make it work with Python 3. Update the code so that the default Python version is Python 3.

Related PRs: #14 #11

some error occured

hi @juangallostra
when i ran your code, then error occured like below

[ INFO:0] Initialize OpenCL runtime...
Traceback (most recent call last):
File "src/ar_main.py", line 174, in
main()
File "src/ar_main.py", line 40, in main
obj = OBJ(os.path.join(dir_name, 'models/cow.obj'), swapyz=True)
File "/home/hyunjo/Face_Detection/augmented-reality/src/objloader_simple.py", line 16, in init
v = v[0], v[2], v[1]
TypeError: 'map' object is not subscriptable

can you tell me how to fix it ?
in advance, thank you

Matching more than one object simultaneously

I want to be able to match more than a single reference object in the captured frames without any serious lags. I'm guessing threading is the way to go but still am unsure about how to go about it and match a reference object with the 3d model to be rendered.

Hi, just got some error

When I change to my image as model.jpg, program error:

 File "src/ar_main.py", line 55, in main
    matches = bf.match(des_model, des_frame)
cv2.error: OpenCV(3.4.1) /Users/travis/build/skvark/opencv-python/opencv/modules/core/src/batch_distance.cpp:238: error: (-215) type == src2.type() && src1.cols == src2.cols && (type == 5 || type == 0) in function batchDistance

What should this error means?

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.