Coder Social home page Coder Social logo

jessejiang0214 / camerapreview Goto Github PK

View Code? Open in Web Editor NEW
15.0 2.0 8.0 398 KB

This project can help Xamarin developer get the raw image data from camera.

Home Page: https://jessejiang.xyz/2019/04/01/introduce-camerapreview/

License: Apache License 2.0

C# 100.00%

camerapreview's Introduction

CameraPreview

CameraPreview project aims to help Xamarin developer to get camera preview more easily. Inspired by ZXing.Net.Mobile, I design a plugins system, based on this system you can add your own plugins easily, like scanning bar code, OCR, and some AI features plugins.

Also, you can create your own overlay above camera view with Xamarin.Froms.

Build Status NuGet NuGet

Usage

The Camera surface will be rendered on ScannerView.

For the settings, you can inherit from ScanningOptionsBase to add your own settings.

The result will come from OnScanResult event or ScanResultCommand Command.

You can use IsScanning to control scanning.

Setup

This project assumes you already get the permission of the camera and init the Camera, so if you didn't get the permission of the camera, it will throw an exception. You can use MediaPlugin to help you get the permissions.

Both iOS and Android you should call init function before Xamarin init.

CameraPreview.iOS.CameraPreviewSettings.Instance.Init(null);
Or
CameraPreview.Droid.CameraPreviewSettings.Instance.Init(null);

If you used plugins, you should call plugins' init function instead of this.

Diagnostics

Implement the ILogger interface to create your own logger and set like this

    public class LoggerImplement : ILogger
    {
        public void Log(string message, LogLevel level)
        {
            System.Diagnostics.Debug.WriteLine(message);
        }
    }

Logger.Instance.LoggerObj = new LoggerImplement();

You can use PerformanceCounter to counter the function running time

var decoder = PerformanceCounter.Start();
PerformanceCounter.Stop(decoder, "ZXing Decoder take {0} ms.");

Plugins

It's very easy to create a plugin for CameraPreview, there's a demo to use ZXing.Net in Plugins/ZXing

In ZXing.Net.Xamarin.Forms project, you can define your own options, result and overlay

In iOS and Droid, you need to create your own decoder, you need to override DefaultDecoderBase class, override Decode function to decode the image when the image comes from preview callback

        // For iOS
        public override IScanResult Decode(CVPixelBuffer pixelBuffer)
        {
        }

        // For Android
        public override IScanResult Decode(Bitmap image)
        {
        }        

ScanningOptionsUpdate function will be called when IsScanning set to true.

public override void ScanningOptionsUpdate(ScanningOptionsBase options)

After you finish the decoder, you need to init CameraPreviewSettings in your own init function like

    public class CameraPreviewSettingsForZXing
    {
        public static void Init()
        {
            CameraPreviewSettings.Instance.Init(new ZXingDecoder());
        }
    }

And call this instead of CameraPreviewSettings.Instance.Init(null);

Thanks

CameraPreview project is based on ZXing.Net.Mobile, ZXing.Net and ZXing, thanks for them.

Buy me a coffee

Via Paypal

camerapreview's People

Contributors

jessejiang0214 avatar

Stargazers

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

Watchers

 avatar  avatar

camerapreview's Issues

UseFrontCameraIfAvailable does not work on Android.

Hello.

I found that UseFrontCameraIfAvailable did not work on Android devices.

I inspected github repository sources and found that front camera was always bypassed by code like this;

// We don't use a front facing camera in this sample.
var facing = (Integer)characteristics.Get(CameraCharacteristics.LensFacing);
if (facing != null && facing == (Integer.ValueOf((int)LensFacing.Front)))
{
          continue;
 }

If you implement UseFrontCameraIfAvailable support on Android, it will be best.

In addition, if it is possible to select or set a target camera for previewing, it will be very helpful. Current Android implementation may use first non-front camera.

Best regards.

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.