Pro camera: The pro custom camera

To capture the preview image it has a block (TakePreviewPicture) that captures the content(image) in the arrangement and saves to the internal storage.

If you're using the block (TakePicture) it may change sometimes because when the camera API fails to take the actual picture, it captures the preview picture instead. TakePreviewPicture captures the arrangement.

Thanks.

In my old app which used the original camera library I could capture the byte data directly from the surface (vertical arrangement) of the control displaying the preview image. The advantage of this was that I could reduce the size of the preview image (making the amount of data much less) and the preview image is updated at a 100s of milliseconds rate rather than the several seconds required to take a picture. I could simulate a real-time movie by using the preview image data.

Since the preview image is displayed the data must be available on the visible surface of the control displaying the image. Theoretically it should be possible to read this data directly from the control surface.

Your original answer of capturing the data into a list and using as a byte array sounds exactly like what I would need to do. I could not see how to do that in App Inventor. Is there a function of the vertical arrangement I am not seeing?

The second part of my question about changing dimensions is an attempt to reduce the amount of data. The quality of the real-time image needed is very low – 640x480 is more than sufficient and reduces the image data size substantially. In the older original camera library you could choose the size of the preview image. I chose something like 640x480. In the new camera2 library documentation I have seen mention that changing the size of the display surface (vertical arrangement) will perform the function of reducing the preview image size – although this was not explicitly stated. Hopefully it is true and I can use the reduced size image.

3 Likes

Hello,

I had try your extension with appinventor.
But the quality of the image is very very poor.
In fact I had made a program to take picture each 5s and enable flash befaore and close after.
But focus is very bad, quality is very bad, lot of snow pixel on the image.
So do you have solution to have very good picture as I use normaly my camera in the same condition.
In fact I take picture in dark condition dans enable the flash just befaire taking the picture and disable the flash just after.

Thanks to help.
Regards.
JL

Ok, we need to set the nosereductionmode, but I don't know why we have to set this command. I Set nothing special on my camera to set this paramater?
Same thing thing exposure when using flash in dark situation.
Thanks.
JL

For a better resolution set the layout height to 70% of the screen. Since this uses camera 2 API, I couldn't find any solutions for the auto-focus like in the built-in camera.

NoiseReductionMode calls the camera API, and its effect varies on different devices.
If your device can set focus distance, then there is a block for that. That will throw an error if that functionality doesn't exist.

1 Like

Hello canalrun - what exactly prevents you from using the current camera library?

Hi.
Seems so cooool!!!
But I'm sorry I'm unable to find the Component "HorizontalArrangement1" block.
So I can't try it :frowning:
Any Help?
Thanks and best regards.

@starsky I think you should learn some basics first.
And with a simple Google search, you could have found the solution quickly.

2 Likes

Thanks! :grin: :grin: :grin:
I just was searching in the proCamera pane :grin: :grin: :grin:

Very nice component. I would like (if possible of course) use it to recognize by OCR a password in the form AH1F5-U98X9-BRODY-7F78C printed on a bookmark and unfortunately near to a text and a QR code. So I would like, if possible, to take a "restricted" picture, the user should frame the pasword inside a rectangular object (that is a part of what the camera sees) that may be a HorizontalArrangement. I made a quick trial .but seems to me that I can not simply fix the size of the component I use as the output of the camera because the camera displays all what it sees in that component. Is there a way to do what I want using your nice component?

Reading above, it is suggested to use TakePreviewPicture which captures the arrangement, and use the Zoom or PinchToZoom feature as well

1 Like

Remix: added output to base64 string functionality

uk.co.metricrat.procambase64_FINAL.aix (32.0 KB)

image

Extension built using RUSH by @shreyash

6 Likes

I tried Procamera extension for appinventor version 01-may-2021. The objective is very simple, to take pictures in the dark. So the solution is basic, turn the flash ON, take a picture, and turn off the flash at regular intervals. But it doesn't work properly. I see serious buggs with your extension, there are obviously problems between the commands to turn on and off the flash and taking pictures. Attached is an example of a program that does not work. Thanks for your help.


prisevuetest.aia (44.8 KB)

The problem lies in your blocks coding, not the camera extension.

Put the Flash = false in the savedPhoto event

2 Likes

I tried Procamera extension for appinventor version September 28 2021- September 28 2021. To take pictures but it doesn't work and when we press the button for the Procamera to active, the screen closes and goes out of the app. What have I forgotten and not added in the program code? Please Help.

Hi, can you share a screenshot of how it looks? Also, did you gave it the necessary permissions to work with?

1 Like

use Do it to debug your blocks...
it looks like there is a / missing in the output path...

Taifun

2 Likes

And is the TakePicture block on another button?

doh, not important... yet :wink:

3 Likes

I think this problem was solved by adding a CAMERA permit. Thanks.

2 Likes

I will be rewriting the extension for sake of stability and improvements.

7 Likes