OpenCV threaded VideoCapture - multithreading

I'm working on a school project that requires the use of OpenCV. I've developed a lane detection algorithm for an RC car. The video capture on my laptop is just fine; however, I'd like to use a raspberry pi. I've built my program on the raspberry pi (release) and there is quite a bit of latency (1-2sec) and the framerate is not stellar. I'd like to try and implement a second thread for the video capture because, from what i understand, VideoCapture() is blocking. I was wondering if this is possible and if so, where should I look for resources to get it up and running?
Thanks!
BTW: I'm using c++ so I was thinking of using intel tbb or c++ thread

Related

Raspberry Pi Camera Module undetectable by common applications

I bought a 5 mp camera module available at Amazon for my raspberry pi 4 2 gb model. Then I configured it for use and tested it with raspistill and raspivid, it is working as expected. But since it is a module connected to the CSI port and not a USB camera its is not detectable by some common applications. For eg.:- OBS(From Pi-Apps), Zoom(From PI-Apps, Pi-Kiss and its web portal).
What I tried ? --
Virtual camera through OBS. I was able to install OBS but I wasn't able to compile
its plugin for virtual camera and camera module. It had numerous errors.
IP camera adapter :- Idea was to stream the camera feed on local web and then convert the feed to a virtual camera. Yes, there are many such applications but all are available only for windows/Mac and not for Linux. Even the few, which are available doesn't support Raspberry pi's architecture.
Is there any workaround or a trick for make the module work like a normal camera ?
P.S.:- If you are wondering why the question is on Stackoverflow,then I feel this is a software related question and Stackoverflow is the best for that ;).
Have you tried looking into libcamera?
https://www.arducam.com/docs/cameras-for-raspberry-pi/raspberry-pi-libcamera-guide/
That might not be the best, straight-forward answer you're looking for, but I recently did some work with a PiCam and found libcamera to work wonders. I used it on a fairly low level and didn't try to point it to additional programs, but perhaps you can find something useful in there! Good luck.

Does .Net Core 3.1 have an event driven method of detecting GPIO pin changes?

I'm creating a .Net Core 3.1 console app to read to and write from GPIO pins on an Orange Pi Zero (similar to a Raspberry Pi Zero). It is running Armbian Focal (Ubuntu). I'm using .Net Core's System.Device.Gpio library.
I have managed to get the reading to and writing from the GPIO pins working - no problem. But the way I am reading the pins is by doing a gpioController.Read() inside a loop. I was wondering if System.Device.Gpio has an event driven method of reading a GPIO pin? In other words, if a pin goes from high to low, or low to high, that an event - let's call it "gpioPinStateChanged" - is triggered. Is there such a thing?
I know I could create my own even notification system, but I was wondering if .Net Core perhaps had something built in? I've looked at a dozen code samples, and none of them have anything like that, so I'm guessing there isn't...
Thanks
Following 0andriy's comments, I saw that you can indeed register events to detect GPIO pin state changes. Thanks to his post, I also found another great post of someone doing the same. He uses GPIO pin change events to calculate the RPM of a fan.
http://blog.timwheeler.io/building-a-pwm-fan-controller-with-dotnet-iot/

Rasperry Pi - Control circuit through website

I got my Raspberry Pi 3 quite recently and have made some basic projects. I'm looking for a method to create a website (on my laptop) and control my raspberry pi through that - well, more just a circuit attached to it. Would that be possible? If so, how would I approach it?
Depending on the language you want to use for the project, you will want to find a gpio library to control the GPIO pins. You would then want to wrap the calls in a webserver. Some examples of the libraries:
https://pypi.python.org/pypi/RPi.GPIO
https://www.npmjs.com/package/pi-gpio
http://wiringpi.com/

DAC pops on Song Start/Stop in Raspbian

This has been a plaguing issue for the Raspberry Pi install of Raspbian (Debian Wheezy) since it was first built. Talking directly to the Raspberry Pi foundation and the Raspbian team has given me no luck.
The issue itself is that the DAC doesn't initialize until it starts playing a song. It then will turn itself off when done, causing another pop. When using this for a pure music player it is infuriating to say the least, especially when the pop is loud.
I have heard this on VLC, MOCP and MPD. This has been covered in the Pi forums, but no answers are found: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=38&t=8783
I turn to you at Stack Overflow to see if there is a way to solve this issue. My idea is to initialize it at start-up so the pop only happens when it boots up, though I don't know how to control the ALSA to do that.
Hopefully a solution can be found.
Thanks!
I've experienced the same crackling and popping noises on the Raspberry Pi's analog output when using mpd. The problem is also discussed here: https://github.com/raspberrypi/linux/issues/128
Your idea of configuring the audio hardware to be initialized only once at boot time is exactly what I did to solve the problem. It's possible to do this using the PulseAudio sound system, which works as a proxy between the audio hardware and programs that want to output sound. For example, audio players like mpd can be configured to use PulseAudio as audio backend.
PulseAudio has a configuration option (module-suspend-on-idle) that configures audio hardware sleep. Disabling audio hardware sleep fixed all crackling and popping noises for me.
I've outlined the necessary steps in closer detail on my blog: http://dbader.org/blog/crackle-free-audio-on-the-raspberry-pi-with-mpd-and-pulseaudio
I have the same problem and resolution is to use either USB audio or HDMI audio output (however converting hdmi audio to analog audio is not easy, converter >40$). It is caused by broadcom firmware. They were saying on rpi forum that it is on the list, but no one knows when it will be really fixed ...
Update: I have tried Creative Play! USB audio, it is the same, however the "click" is not that loud. So it is not 100% solution, we have to wait for the fix.
By using the Aureon Dual USB sound card I got zero popping from my raspi. Before I had popping at every song.
I have read that using the Aureon is impossible without limiting the usb ports to version 1.1, but this was not the case for me. It worked out of the box. One slight problem remains, I cannot insert the sound card when the raspi is on, it will reboot. But that's not a problem for me, I never remove the sound card.
My raspi runs raspbian wheezy and plays music via mpd and an nfs share.

Best cross-platform audio library for synchronizing audio playback

I'm writing a cross-platform program that involves scrolling a waveform along with uncompressed wav/aiff audio playback. Low latency and accuracy are pretty important. What is the best cross-platform audio library for audio playback when synchronizing to an external clock? By that I mean that I would like to be able to write the playback code so it sends events to a listener many times per second that includes the "hearing frame" at the moment of the notification.
That's all I need to do. No recording, no mixing, no 3d audio, nothing. Just playback with the best possible hearing frame notifications available.
Right now I am considering RTAudio and PortAudio, mostly the former since it uses ALSA.
The target platforms, in order of importance, are Mac OSX 10.5/6, Ubuntu 10.11, Windows XP/7.
C/C++ are both fine.
Thanks for your help!
The best performing cross platform library for this is jack. Properly configured, jack on Linux can outperform Windows asio easily (in terms of low latency processing without dropouts). But you cannot expect normal users to use jack (the demon should be started by the user before the app is started, and it can be a bit tricky to set up). If you are making an app specifically for pro-audio I would highly recommend looking in to jack.
Edit:
Portaudio is not as high-performance, but is much simpler for the user (no special configuration should be needed on their end, unlike jack). Most open source cross platform audio programs that I have used use portaudio (much moreso than openal), but unlike jack I have not used it personally. It is callback based, and looks pretty straightforward though.
OpenAL maybe an option for you.

Resources