Welcome!
This is the community forum for my apps Pythonista and Editorial.
For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.
face_detector.py strange behavior
-
You might consider adding a way for frame_counter and last frame time to be periodically reset to 0 if frame_xounter ever gets to be large.
Or, have a label that gets updated with frame time, frame_counter , and now time -- since these are used in the logic inside the callback.
-
Did you test? Same here?
-
@pavlinb, works as-is for me, iPhone 11 Pro.
-
So, the fps measurement at the top didn’t hang after 80-90 seconds?
-
Do you fix the problem ?
because this is my problem too -
@pavlinb, earlier you said 80-90 frames, which would be about 3 seconds. I have not yet let it run for minutes.
-
@pavlinb, if this was originally run on iPhone 6, I bet we can do better than 5 fps on the face detection today. Have you studied enough to know whether we really need to initialize the face detector with options every time it is used?
-
@mikael My goal is not face detection. I need the method to obtain frames from video camera and use them continuously.
-
@mikael Correct duration should be 80-90 passes of face detector.
-
When phone wakes up after auto lock, script makes another 80-90 passes and hangs again.
-
I wonder if you need an autorelease pool. There was a thread on this recently, there is a context manager in objc_util.
-
Also, get rid of wait_modal, but instead stop everything in a custom view will_close method. Wait_modal keeps your background thread from doing anything else.
-
@JonB Tried, but same behaviour.
-
Other way of obtaining video camera frames continuously is welcome.
-
For data processing or just displaying as a preview?
-
@JonB For data processing.
-
ok, i do see some issues..
first, we need to implement the didDropSampleBuffer delegate method, and display the reason for a late frame.
second, we need to set the minFrameDuration, so that the delegate is never called more than you need it. on older versions, i believe this was in output.minFrameDuration. in newer iOS versions, i believe you set on the connection, output.connections[0].videoMinFrameDuration
third, there is an issue regarding what dispatch queue things are called on. or, the delegate needs to always return as fast as possible, calling heavy lifting on another thread, and dropping data otherwise. i think what is happening is that your delegate gets called on a background thread, and just keeps falling farther and farther behind. it might be better to ensure the delegate is called on the main thread.
ill post a gist later with some improvements.
-
-
I have a version based of Cethric's. I'll clean it up and post later. I've implemented the drop frame callback so you can see what the issues are.
One problem I have found is that the various ways to set minFrameDuration don't work. That means the callback gets called at a high rate.
-
It seems that setMinFrameDuration is in camera.captureOutput object ('AVCaptureVideoDataOutput').
But there is also setActiveVideoMinFrameDuration in camera.captureDevice ('AVCaptureDevice').
I couldn't make them working too both.