Git Product home page Git Product logo

instascan's People

Contributors

askarby avatar schmich 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  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

instascan's Issues

Make webrtc-adapter a peer dependency

See #45.

  • webrtc-adapter should be a peer dependency, not a direct dependency, of this library
  • Update installation instructions
    • Browsers: need to include instascan.min.js as well as adapter.min.js
    • Provide a fully bundled version (webrtc-adapter included)?
    • npm/yarn: npm install --save instascan webrtc-adapter
    • ...

Add click-to-scan functionality

  • Instead of always-on scanning
  • Add to API, e.g. scanner.scan()
  • Allow disabling continuous scanning with opts.continuous.
  • Uses same scan event path, should respect captureImage
  • Should ignore refractoryPeriod
  • Use promise for result? Duplicates effort with scan event, but allows for better control

Black screen with Xiaomi Redmi 4 Pro

The back camera of my Xiaomi Redmi 4 Pro phone shows only a black image.
The front camera instead works fine.
It seems to be a bug with this library because other javascript scanners like quaggaJS work fine with both cameras.
This bug is in the demo page too.

Add QR considerations to README

If you control QR generation:

  • Size
  • Complexity
  • Border
  • Matte vs. glossy

Scanning:

  • Higher resolution typically provides better results, but is more CPU intensive
  • Example setup
  • Orientation doesn't matter
  • Camera autofocus/fixed-focus
  • Exposure compensation
  • Blurriness is bad
  • Angled/skewed is bad

Camera name is blank on first launch/permissions

  • Open Chrome in incognito
  • Open site
  • Notice prompt for permissions
  • Open instascan settings
  • Notice blank camera name
  • Issue: we call getCameras before our first call to webkitGetUserMedia, so the cameras do not enumerate properly
  • Fix: have to figure out how to do first-time discovery of cameras (ordering)

Add support for webhook callbacks with scan results

  • URL (template)
  • Method: GET, POST, PUT, PATCH, etc.
  • Additional headers: (key, value)
  • Template variables
    • %r: raw content
    • %s: scanned content
    • %i: base64-encoded image data
  • Payload
    • Template if specified, otherwise default
    • JSON, form-encoded, ...
    • Auto-determine Content-Type header
  • Checkbox: include image data

MVP:

  • POST
  • User-specified URL
  • JSON payload
  • Option to include base64-encoded image data

Make backgroundScan default to true

By default, backgroundScan should be true to avoid potentially confusing behavior (see #43). By making the user explicitly set backgroundScan to false, they should understand why the preview video disappears and reappears.

Add setting to transform content

  • Can be complex or simple
  • Rules based transformations
  • e.g. regex match, text output
  • e.g. match: .*, transform: http://foo.com?q=$0
  • $1, $2, ... capture groups
  • Will still be treated as URL if result is URL formatted

AMD environment compatibility.

When using the library inside a AMD (requireJS) app I get an error probably related with the loading of lodash module. There are plans to package the library as AMD or UMD? There is a workaround for this issue?

Uncaught TypeError: _.forEach is not a function
at Object.init (instascan.js:7995)
at Stamp (instascan.js:26856)
at Function.create (instascan.js:27056)
at Scanner._createStateMachine (instascan.js:30311)
at new Scanner (instascan.js:30150)
at scanQR (play.js:866)
at HTMLFieldSetElement. (play.js:528)
at HTMLFieldSetElement.dispatch (jquery-2.1.4.min.js:3)
at HTMLFieldSetElement.r.handle (jquery-2.1.4.min.js:3)

Add README

  • Add README
  • Deployment steps
    • Direct copyable, static
    • HTTPS for WebRTC
    • CORS for POST
    • Supports subfolder deployment (http://foo.com/scan/)
  • QR code guidelines (autofocus, resolution, size, complexity)
  • Brief rundown of features
  • Screenshot of website/scan
  • API documentation, usage

Handle case when saved camera is no longer present

  • Connect camera
  • Launch instascan
  • Select connected camera (saved in localStorage)
  • Close instascan
  • Disconnect camera
  • Reopen instascan
  • Camera preview does not launch since camera is no longer available
  • Need to fallback to default existing camera

Fix first-time use null camera name

let scanner = new Instascan.Scanner();
scanner.addListener('scan', function (content, image) {
  console.log(content);
});
Instascan.Camera.getCameras().then(function (cameras) {
  if (cameras.length > 0) {
    scanner.start(cameras[0]);
  } else {
    console.error('No cameras found.');
  }
});

When running this for the first time on a domain that the user doesn't trust yet, the cameras from getCameras have null names because the user hasn't yet allowed access to the camera.

When scanner.start is called, the user is prompted. When the user accepts, the app has to call getCameras again to actually get the names.

This should be at least called out in the documentation if not fixed with a more straightforward API.

`<video>` seems to get `visibility:hidden;` after change tab and back.

Here are my HTML.

<div id="video_container" style="align-items:center;display:flex;height:100%;justify-content:center;margin-bottom:0px;margin-left:0px;margin-right:0px;margin-top:2.5px;overflow:hidden;">
  <video id="video" width="50%" autoplay loop muted preload></video>
</div>

I am using the example codes.

let scanner = new Instascan.Scanner({ video: document.getElementById('video') });
scanner.addListener('scan', function (content) {
  console.log(content);
});
Instascan.Camera.getCameras().then(function (cameras) {
  if (cameras.length > 0) {
    scanner.start(cameras[0]);
  } else {
    console.error('No cameras found.');
  }
}).catch(function (e) {
  console.error(e);
});

Here is animated .gif of the problem. After I change tab (twice) the <video> gone although the DOM is still the same.

http://i.imgur.com/Qr4yp3E.gif

The screen shot of the <video> when it is gone.

http://i.imgur.com/vz7GcKt.png

Fix getImageData memory issue

instascan.js:26271 Uncaught RangeError:
Failed to execute 'getImageData' on 'CanvasRenderingContext2D':
Out of memory at ImageData creationanalyze
@ instascan.js:26271_analyze
@ instascan.js:26156_scan
@ instascan.js:26207(anonymous function)
@ instascan.js:26198
>>>> var data = this.canvasContext.getImageData(0, 0, this.sensorWidth, this.sensorHeight).data;
for (var i = 0, j = 0; i < data.length; i += 4, j++) {
  ZXing.HEAPU8[this.imageBuffer + j] = data[i];
}

Show scan is in process

Is there a way yo have a mark on the canvas to show the user a frame has been captured and an analyse is in progress?

Or better show like in a native app some dots over the recognized points ?

Improve demo usability

  • Show live/not live status
  • Show error if one occurs when enumerating cameras (e.g. camera access denied) instead of just "No cameras found"
  • Add button to retry camera access (e.g. if user blocks then wants to allow camera access)

Fix demo for mobile

  • Fast scan period makes preview laggy (too much for mobile)
  • mirror setting doesn't work well (might be phone-dependent)
  • Layout is optimized for desktop, looks bad on mobile, need mobile-optimized, too

Getting below issue when published on azure

Uncaught SyntaxError: Unexpected end of input
app.js:11 Uncaught ReferenceError: Instascan is not defined
at Ue.mounted (app.js:11)
at we (vue.min.js:6)
at Ue.e._mount (vue.min.js:6)
at Ue.$mount (vue.min.js:8)
at Ue.$mount (vue.min.js:8)
at Ue.Re.e._init (vue.min.js:6)
at new Ue (vue.min.js:6)
at app.js:1

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.