GithubHelp home page GithubHelp logo

natario1 / cameraview Goto Github PK

View Code? Open in Web Editor NEW
4.9K 98.0 910.0 29.42 MB

📸 A well documented, high-level Android interface that makes capturing pictures and videos easy, addressing all of the common issues and needs. Real-time filters, gestures, watermarks, frame processing, RAW, output of any size.

Home Page: https://natario1.github.io/CameraView

License: Other

Java 99.52% Kotlin 0.48%
android camera camera-api high-level android-library opengl camera-control capture-video picture camera-preview

cameraview's Introduction

Build Status Code Coverage Release Issues Funding

Post-processing videos or want to reduce video size before uploading? Take a look at our Transcoder.

Like the project, make profit from it, or simply want to thank back? Please consider sponsoring me or donating!

Need support, consulting, or have any other business-related question? Feel free to get in touch.

CameraView

CameraView is a well documented, high-level library that makes capturing pictures and videos easy, addressing most of the common issues and needs, and still leaving you with flexibility where needed.

api 'com.otaliastudios:cameraview:2.7.2'
  • Fast & reliable
  • Gestures support [docs]
  • Real-time filters [docs]
  • Camera1 or Camera2 powered engine [docs]
  • Frame processing support [docs]
  • Watermarks & animated overlays [docs]
  • OpenGL powered preview [docs]
  • Take high-quality content with takePicture and takeVideo [docs]
  • Take super-fast snapshots with takePictureSnapshot and takeVideoSnapshot [docs]
  • Smart sizing: create a CameraView of any size [docs]
  • Control HDR, flash, zoom, white balance, exposure, location, grid drawing & more [docs]
  • RAW pictures support [docs]
  • Lightweight
  • Works down to API level 15
  • Well tested

Support

If you like the project, make profit from it, or simply want to thank back, please consider sponsoring me through the GitHub Sponsors program! You can have your company logo here, get private support hours or simply help me push this forward. If you prefer, you can also donate to our OpenCollective page.

CameraView is trusted and supported by ShareChat, a social media app with over 100 million downloads.

Feel free to contact me for support, consulting or any other business-related question.

Thanks to all our project backers... [become a backer]

...and to all our project sponsors! [become a sponsor]

Setup

Please read the official website for setup instructions and documentation. You might also be interested in our changelog or in the v1 migration guide. Using CameraView is extremely simple:

<com.otaliastudios.cameraview.CameraView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:cameraPictureSizeMinWidth="@integer/picture_min_width"
    app:cameraPictureSizeMinHeight="@integer/picture_min_height"
    app:cameraPictureSizeMaxWidth="@integer/picture_max_width"
    app:cameraPictureSizeMaxHeight="@integer/picture_max_height"
    app:cameraPictureSizeMinArea="@integer/picture_min_area"
    app:cameraPictureSizeMaxArea="@integer/picture_max_area"
    app:cameraPictureSizeSmallest="false|true"
    app:cameraPictureSizeBiggest="false|true"
    app:cameraPictureSizeAspectRatio="@string/video_ratio"
    app:cameraVideoSizeMinWidth="@integer/video_min_width"
    app:cameraVideoSizeMinHeight="@integer/video_min_height"
    app:cameraVideoSizeMaxWidth="@integer/video_max_width"
    app:cameraVideoSizeMaxHeight="@integer/video_max_height"
    app:cameraVideoSizeMinArea="@integer/video_min_area"
    app:cameraVideoSizeMaxArea="@integer/video_max_area"
    app:cameraVideoSizeSmallest="false|true"
    app:cameraVideoSizeBiggest="false|true"
    app:cameraVideoSizeAspectRatio="@string/video_ratio"
    app:cameraSnapshotMaxWidth="@integer/snapshot_max_width"
    app:cameraSnapshotMaxHeight="@integer/snapshot_max_height"
    app:cameraFrameProcessingMaxWidth="@integer/processing_max_width"
    app:cameraFrameProcessingMaxHeight="@integer/processing_max_height"
    app:cameraFrameProcessingFormat="@integer/processing_format"
    app:cameraFrameProcessingPoolSize="@integer/processing_pool_size"
    app:cameraFrameProcessingExecutors="@integer/processing_executors"
    app:cameraVideoBitRate="@integer/video_bit_rate"
    app:cameraAudioBitRate="@integer/audio_bit_rate"
    app:cameraGestureTap="none|autoFocus|takePicture"
    app:cameraGestureLongTap="none|autoFocus|takePicture"
    app:cameraGesturePinch="none|zoom|exposureCorrection|filterControl1|filterControl2"
    app:cameraGestureScrollHorizontal="none|zoom|exposureCorrection|filterControl1|filterControl2"
    app:cameraGestureScrollVertical="none|zoom|exposureCorrection|filterControl1|filterControl2"
    app:cameraEngine="camera1|camera2"
    app:cameraPreview="glSurface|surface|texture"
    app:cameraPreviewFrameRate="@integer/preview_frame_rate"
    app:cameraPreviewFrameRateExact="false|true"
    app:cameraFacing="back|front"
    app:cameraHdr="on|off"
    app:cameraFlash="on|auto|torch|off"
    app:cameraWhiteBalance="auto|cloudy|daylight|fluorescent|incandescent"
    app:cameraMode="picture|video"
    app:cameraAudio="on|off|mono|stereo"
    app:cameraGrid="draw3x3|draw4x4|drawPhi|off"
    app:cameraGridColor="@color/grid_color"
    app:cameraPlaySounds="true|false"
    app:cameraVideoMaxSize="@integer/video_max_size"
    app:cameraVideoMaxDuration="@integer/video_max_duration"
    app:cameraVideoCodec="deviceDefault|h264|h263"
    app:cameraAutoFocusResetDelay="@integer/autofocus_delay"
    app:cameraAutoFocusMarker="@string/cameraview_default_autofocus_marker"
    app:cameraUseDeviceOrientation="true|false"
    app:cameraFilter="@string/real_time_filter"
    app:cameraPictureMetering="true|false"
    app:cameraPictureSnapshotMetering="false|true"
    app:cameraPictureFormat="jpeg|dng"
    app:cameraRequestPermissions="true|false"
    app:cameraExperimental="false|true">
    
    <!-- Watermark! -->
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:src="@drawable/watermark"
        app:layout_drawOnPreview="true|false"
        app:layout_drawOnPictureSnapshot="true|false"
        app:layout_drawOnVideoSnapshot="true|false"/>
        
</com.otaliastudios.cameraview.CameraView>

cameraview's People

Contributors

aartikov avatar agrawalsuneet avatar andreidiaconu avatar android-dataticket avatar anpez avatar austinkettner avatar billysutomo avatar caleb-allen avatar calebdre avatar cneuwirt avatar dependabot[bot] avatar deweyreed avatar dwillmc avatar eomine avatar ezequieladrianm avatar honzasmuk avatar johnson145 avatar jonasrottmann avatar josh-burton avatar m1r0n41k avatar namazed avatar natario1 avatar naymushin avatar nethergrim avatar noln avatar obsidianx avatar suomi35 avatar thehollidayinn avatar tryadelion avatar yperess 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  avatar

cameraview's Issues

Video orientation settings (front & back camera)

Hello !

Thanks for this great lib, working like a charm!

I'm currently using CameraView in my app for taking several video sequences. At the end of the user flow, I'm merging all these sequences to create one video. For this purpose, we use mp4Parser, another great lib!

The problem I have now is that I have my sequences from the front camera upside down after the merge. I assume that it's an orientation issue:

  • front camera sequence has an orientation of 270
  • back camera sequence has an orientation of 90

The issue is described here

So the merge doesn't take into consideration this difference of orientation and set to the front camera sequences an orientation of 90 instead of 270 that's why they are upside down in the result.

Is it possible to have a mode/methods where we could have access to the metadata of the video created by CameraView or eventually to have access to the mediaRecorder? My idea would be to put the same orientation to both side sequences in order to avoid the upside down result after the merge.

Thank you in advance!

Odd even video rotation issue in video capture

I am using the library for capturing multiple videos in one (like instagram).
But the issue is that when we flip the camera from real to back the rotation goes wrong.
Example scenario: If we start video capture from rear, and capture a video then flip the camera to front and capture a video and repeat the same for all video clips, the final video will contain all rear video clips with rotation 90 (correct) and all front video clips with rotation of 270 (Up side down - incorrect)
Please make the rotation value to be changed dynamically no matter how many times we capture the video.

Crash using focus Gesture on Tap

same happens with focusWithMarker aswell.
This is from Android monitor:

                                                     [ 09-16 19:23:39.469   542: 5980 E/         ]
                                                     Camera[ERROR] aec_biz_set_debug_data_enable: 1448: aec_biz_set_debug_data_enable:1448  aec set param AEC_SET_PARAM_DEBUG_DATA_LEVEL failed with result 1

09-16 19:23:42.459 5692-5890/app.storywatch E/AndroidRuntime: FATAL EXCEPTION: CameraViewController
Process: app.storywatch, PID: 5692
java.lang.RuntimeException: setParameters failed
at android.hardware.Camera.native_setParameters(Native Method)
at android.hardware.Camera.setParameters(Camera.java:1984)
at com.otaliastudios.cameraview.Camera1$1.run(Camera1.java:51)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.os.HandlerThread.run(HandlerThread.java:61)

                                                          [ 09-16 19:23:42.459   542: 5981 E/         ]
                                                          Camera[ERROR] af_process_frame: 838: af_process_frame:838  af_mode=2, af_state=0, caf_state=0, status=1, trigger_caf=0
                                                          
                                                          
                                                          [ 09-16 19:23:42.459   542: 5981 E/         ]
                                                          Camera[ERROR] af_port_stats_done_callback: 1412: af_port_stats_done_callback:1412  af_port_stats_done_callback DONE AF STATS ACK back

09-16 19:23:42.749 5692-5931/app.storywatch E/libGLESv1: HWUI Protection: wrong call from hwui context F:ES1-glDeleteTexturesSEC
09-16 19:23:42.749 5692-5703/app.storywatch E/BufferQueueProducer: [SurfaceTexture-0-5692-0] queueBuffer: BufferQueue has been abandoned
09-16 19:23:42.779 5692-5703/app.storywatch E/BufferQueueProducer: [SurfaceTexture-0-5692-0] queueBuffer: BufferQueue has been abandoned
09-16 19:23:42.809 5692-5704/app.storywatch E/BufferQueueProducer: [SurfaceTexture-0-5692-0] queueBuffer: BufferQueue has been abandoned
09-16 19:23:42.849 5692-5703/app.storywatch E/BufferQueueProducer: [SurfaceTexture-0-5692-0] queueBuffer: BufferQueue has been abandoned
09-16 19:23:42.879 5692-5704/app.storywatch E/BufferQueueProducer: [SurfaceTexture-0-5692-0] queueBuffer: BufferQueue has been abandoned
09-16 19:23:43.049 5692-5692/app.storywatch E/Sensors: ~SensorEventQueue 0

PS: nice library, good work, appreciated!

Lost focus after taking picture

Hi. I have an issue with focus after taking picture. Autofocus works ok on tap, but after I press capture the picture loses its focus and gets blurry. Is there any solution for this?

camera view set zoom point

The current api allows setting zoom around center only either by pinch or scroll. Is it possible to zoom around specific point not only from center but say from where pinch started?

Failed to resolve...

When I try to bind in the library to my project (Gradle) I get the following error:

> Error:Failed to resolve: com.android.support:exifinterface:26.0.1
> <a href="install.m2.repo">Install Repository and sync project</a><br><a href="openFile:C:/Users/Anti/Desktop/PokeEmblem/BabaCamera/app/build.gradle">Open File</a><br><a href="open.dependency.in.project.structure">Show in Project Structure dialog</a>
> 
> Error:Failed to resolve: com.android.support:support-annotations:26.0.1
> <a href="install.m2.repo">Install Repository and sync project</a><br><a href="openFile:C:/Users/Anti/Desktop/PokeEmblem/BabaCamera/app/build.gradle">Open File</a><br><a href="open.dependency.in.project.structure">Show in Project Structure dialog</a>

Have absolutly no clue what's the problem :/

hide the focus marker

A focus marker (oval shaped with white border) is always visible on the camera view..Please tell me how to hide this.

RuntimeException: Fail to connect to camera service

Device: Samsung S6
Android: 5.1.1

Step to reproduce:

  1. Open demo app
  2. Change screen orientation few times (5-6)

Crash:

com.otaliastudios.cameraview.demo D/SensorManager: registerListener :: 0, MPU6500 Acceleration Sensor, 200000, 0,  
com.otaliastudios.cameraview.demo D/SecWifiDisplayUtil: Metadata value : SecSettings2
com.otaliastudios.cameraview.demo W/CameraBase: An error occurred while connecting to camera: 0
system_process V/WindowManager: Adding window Window{1ab62397 u0 d0 com.otaliastudios.cameraview.demo/com.otaliastudios.cameraview.demo.MainActivity} at 2 of 6 (after Window{258291a7 u0 d0 com.google.android.googlequicksearchbox/com.google.android.launcher.GEL})
com.otaliastudios.cameraview.demo D/PhoneWindow: *FMB* isFloatingMenuEnabled mFloatingMenuBtn : null
com.otaliastudios.cameraview.demo D/PhoneWindow: *FMB* isFloatingMenuEnabled return false
system_process I/WindowManager: Screen frozen for +336ms due to AppWindowToken{30159455 token=Token{3b92330c ActivityRecord{3dadce3f u0 com.otaliastudios.cameraview.demo/.MainActivity t491}}}
system_process W/ActivityManager:   Force finishing activity 1 com.otaliastudios.cameraview.demo/.MainActivity
com.otaliastudios.cameraview.demo E/AndroidRuntime: FATAL EXCEPTION: CameraViewController
                                                    Process: com.otaliastudios.cameraview.demo, PID: 14858
                                                    java.lang.RuntimeException: Fail to connect to camera service
                                                        at android.hardware.Camera.<init>(Camera.java:545)
                                                        at android.hardware.Camera.open(Camera.java:385)
                                                        at com.otaliastudios.cameraview.Camera1.onStart(Camera1.java:145)
                                                        at com.otaliastudios.cameraview.CameraController$1.run(CameraController.java:48)
                                                        at android.os.Handler.handleCallback(Handler.java:739)
                                                        at android.os.Handler.dispatchMessage(Handler.java:95)
                                                        at android.os.Looper.loop(Looper.java:145)
                                                        at android.os.HandlerThread.run(HandlerThread.java:61)
com.otaliastudios.cameraview.demo E/CameraView: onMeasure, surface is not ready. Calling default behavior.
com.otaliastudios.cameraview.demo E/BufferQueueProducer: [unnamed-14858-1] cancelBuffer: BufferQueue has been abandoned
com.otaliastudios.cameraview.demo E/CameraView: onMeasure, surface is not ready. Calling default behavior.
system_process V/ApplicationPolicy: isApplicationStateBlocked userId 0 pkgname com.otaliastudios.cameraview.demo
com.otaliastudios.cameraview.demo E/BufferQueueProducer: [unnamed-14858-1] cancelBuffer: BufferQueue has been abandoned
com.otaliastudios.cameraview.demo E/BufferQueueProducer: [unnamed-14858-1] cancelBuffer: BufferQueue has been abandoned
com.otaliastudios.cameraview.demo E/BufferQueueProducer: [unnamed-14858-1] cancelBuffer: BufferQueue has been abandoned
com.otaliastudios.cameraview.demo E/BufferQueueProducer: [unnamed-14858-1] cancelBuffer: BufferQueue has been abandoned
com.otaliastudios.cameraview.demo E/BufferQueueProducer: [unnamed-14858-1] cancelBuffer: BufferQueue has been abandoned
com.otaliastudios.cameraview.demo E/BufferQueueProducer: [unnamed-14858-1] cancelBuffer: BufferQueue has been abandoned

Setting parameters while camera is restarting (for example right after setFacing)

Hello!

I found another error. Maybe it's a library error.

An error occurs if we try to switch the HDR or white balance.

I do as you said before:

  1. camera.stop();
  2. Set the settings (front or back, grid, quality, etc.)
  3. camera.start();

Everything works fine if we not use setHDR or setWhiteBalance. It does not matter where we apply the settings (before the camera.start() or after). Using these two settings in onResume does not cause errors.

Here are two pictures with errors:

  1. For HDR:
    image

  2. For WhiteBalance:
    image

Error while stopping the camera engine - NPE

Sometimes I get a NullPointerException when trying to stop the camera:

Fatal Exception: com.otaliastudios.cameraview.CameraUnavailableException: Error while stopping the camera engine.
       at com.otaliastudios.cameraview.CameraController$3.run(CameraController.java:134)
       at android.os.Handler.handleCallback(Handler.java:739)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:168)
       at android.os.HandlerThread.run(HandlerThread.java:61)
Caused by java.lang.NullPointerException: Attempt to write to field 'boolean android.hardware.Camera.mIsReleased' on a null object reference
       at android.hardware.Camera.releaseStaticSubCam(Camera.java:833)
       at android.hardware.Camera.release(Camera.java:804)
       at com.otaliastudios.cameraview.Camera1.onStop(Camera1.java:255)
       at com.otaliastudios.cameraview.CameraController$3.run(CameraController.java:128)
       at android.os.Handler.handleCallback(Handler.java:739)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:168)
       at android.os.HandlerThread.run(HandlerThread.java:61)

I don't think this is the same problem as #77, because here the camera was started completely. At least I received the onCameraOpened event before getting this error.

Focus Marker not visible on tap

Enabling single tap gesture to perform "Focus with marker" - Marker is not visible. Just realised that even the grid marker is not visible.

I spent few hour and found the issue. If you can grant me access to push I can create a PR.

Stock snapshot/image byte array

Could you please add some functionality to provide return stock byte array from snapshot/image?
I think it would be much better if user will have ability decide what to do with this byte array.
It may be some kind of option.
Like captureImage(boolean processImage) and captureSnapshot(boolean processImage)

Only the original thread that created a view hierarchy can touch its views.

Hello, I'm using your library to capture video, but when I use it, based on the example that comes in it, I get the following error

Process: com.brive.yooin, PID: 11035 android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6902) at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:1052) at android.view.View.requestLayout(View.java:19680) at android.view.View.requestLayout(View.java:19680) at android.view.View.requestLayout(View.java:19680) at android.view.View.requestLayout(View.java:19680) at android.view.View.requestLayout(View.java:19680) at android.view.View.requestLayout(View.java:19680) at android.support.constraint.ConstraintLayout.requestLayout(ConstraintLayout.java:1959) at android.view.View.requestLayout(View.java:19680) at com.otaliastudios.cameraview.CameraView$CameraCallbacks.onCameraPreviewSizeChanged(CameraView.java:1218) at com.otaliastudios.cameraview.Camera1.setup(Camera1.java:116) at com.otaliastudios.cameraview.Camera1.start(Camera1.java:153) at com.otaliastudios.cameraview.CameraView$2.run(CameraView.java:500) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.os.HandlerThread.run(HandlerThread.java:61)

Any recommendation?

Bug: Capturing videos on Android API < 23 fails

I got another issue: at least when using the Android Emulator, taking videos failes for Lollipop and older. Unfortunately, I can't test it on a real device, but maybe anybode can confirm the bug or restrict it to the Emulator?

Trying to read the created video file, it seems as if it does not contain a single frame. The file itself was created though and has write access.

This happens in the demo app after recording (instead of playing the video)

This is the full log.

Running my own app, I get the same problem, but the log looks a little bit different. The only obviously-related error I can find is 09-27 18:51:50.900 2218-2218/com.siwalusoftware.dogscanner E/MediaRecorder: stop failed: -1007.

Camera view does not fill the screen

I'm having some problems with the CameraView size, in some devices it does not fill all the screen, showing the background sides or bottom/top depending on the device.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.otaliastudios.cameraview.CameraView
            android:id="@+id/camera_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:keepScreenOn="true"
            app:cameraSessionType="video" />
    </RelativeLayout>

The problem x working in some devices (S6 Edge)

Risk of Repository Takedown

I don't know if forks of this repo got the same notification, but I wanted to inform you that this library has been reported for copyright infringement by the original library I had forked, lots of lines and commits ago: the successful CameraKit-Android.

I am sure you know this, because a link to that repo has always been pretty evident in our README. In a few words, guys at CameraKit-Android are complaining about me not reporting info of their license. Sadly, that's true - a long time ago I had relicensed the repo to Apache in order to be consistent with other libraries of mine, without thinking that I should have kept the original MIT too.

That was made out of distraction and was not a smart move, but hey, we learn from errors. I am deeply sorry that the original authors felt this as an offense to their work, and have fixed it with #68 (relicensed this repo to MIT as well, for simplicity).

GitHub policies give us about approximately 24 hours (sic) to fix the infringement, and the copyright owner has to agree that the issue is fixed. If they don't, GitHub will shutdown this repo immediately without checks. Bintray will probably follow, so the library won't be available anymore in gradle. I have done what I could, and now it's up to guys there.

The report I got seemed very angry and targeted the whole repository. Again, this is just, and we were wrong. But that's sad too - if they had just filed an issue here, I would have acknowledged my error and added back their license. It looks clear to me that we never wanted or aimed at hiding our parent repo - it has always been the first link in our README file. We were in good faith.

Today we got to 400 stars, which makes me happy, but we are far from being as successful as them, and there's a lot of work to do. We clearly have taken different directions - the two repos share about 5% of meaningful lines, and that number can only decrease over time. I would like to keep this going, but if the guys there decide to proceed, there is not much I can do.

I have tried to get in touch with them but currently had no response. I hope I will have one so we can figure out what's wrong together. But if you come and find this closed, well, I'm sorry.

startAutoFocus - getParameters or setParameters failed

The startAutoFocus causes a crash, because either getParameters or setParameters failed.

Fatal Exception: java.lang.RuntimeException: getParameters failed (empty parameters) at android.hardware.Camera.native_getParameters(Camera.java) at android.hardware.Camera.getParameters(Camera.java:1632) at com.otaliastudios.cameraview.Camera1.startAutoFocus(Camera1.java:767) at com.otaliastudios.cameraview.CameraView.onGesture(CameraView.java:459) at com.otaliastudios.cameraview.CameraView.onTouchEvent(CameraView.java:438)

and

Fatal Exception: java.lang.RuntimeException: getParameters failed (empty parameters) at android.hardware.Camera.native_getParameters(Camera.java) at android.hardware.Camera.getParameters(Camera.java:1632) at com.otaliastudios.cameraview.Camera1.startAutoFocus(Camera1.java:767) at com.otaliastudios.cameraview.CameraView.onGesture(CameraView.java:459) at com.otaliastudios.cameraview.CameraView.onTouchEvent(CameraView.java:438)

Comes from different devices actually supporting auto focus.

Any thoughts?

Feature Request: Frame Processor

I love this library! It's the best camera library I've tested. Thank you so much for working on this.

The one thing missing is a frame processor so I can do barcode detection and facial recognition. Fotoapparat supports Frame Processing, so I use that, but CameraView supports way more features, like tap-to-focus, so I'd love to switch over.

Thank you

CameraView in Fragment throws NPE

I'm implementing CameraView in a fragment and app crashes when trying to open said fragment:
--------- beginning of crash 08-26 18:51:53.625 30605-30605/com.pictematic E/AndroidRuntime: FATAL EXCEPTION: main Process: com.pictematic, PID: 30605 java.lang.RuntimeException: Unable to resume activity {com.pictematic/com.pictematic.CameraActivity}: java.lang.NullPointerException: Attempt to read from field 'com.otaliastudios.cameraview.CameraView com.pictematic.PostFragments.CameraPreviewFragment.cameraView' on a null object reference at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3469) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3509) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2772) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1507) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6236) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781) Caused by: java.lang.NullPointerException: Attempt to read from field 'com.otaliastudios.cameraview.CameraView com.pictematic.PostFragments.CameraPreviewFragment.cameraView' on a null object reference at com.pictematic.CameraActivity.onResume(CameraActivity.java:113) at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1270) at android.app.Activity.performResume(Activity.java:6788) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3446) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3509)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2772)  at android.app.ActivityThread.-wrap12(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1507)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6236)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781) 

onResume, onPause and onDestroy are called from the parent activity:

`@Override
protected void onDestroy() {
super.onDestroy();
CameraPreviewFragment cameraPreviewFragment = (CameraPreviewFragment) getSupportFragmentManager().findFragmentById(R.id.cameraView);
cameraPreviewFragment.cameraView.destroy();
}

@Override
protected void onPause() {
    super.onPause();
    CameraPreviewFragment cameraPreviewFragment = (CameraPreviewFragment) getSupportFragmentManager().findFragmentById(R.id.cameraView);
    cameraPreviewFragment.cameraView.stop();
}

@Override
protected void onResume() {
    super.onResume();
    CameraPreviewFragment cameraPreviewFragment = (CameraPreviewFragment) getSupportFragmentManager().findFragmentById(R.id.cameraView);
    cameraPreviewFragment.cameraView.start();
}`

CameraView reference in Fragment:
@BindView(R.id.cameraView) public CameraView cameraView;

CameraView listener in onCreate:
`cameraView.addCameraListener(new CameraListener() {
@OverRide
public void onPictureTaken(byte[] jpeg) {
super.onPictureTaken(jpeg);
mCapturingPicture = false;
long callbackTime = System.currentTimeMillis();

            if (mCapturingVideo) {
                //message("Captured while taking video. Size= "+mCaptureNativeSize, false);
                return;
            }

            CameraActivity.setImage(jpeg);
            //Intent intent = new Intent(getContext(), CameraActivity.class);
            //startActivity(intent);
            writeToFile(jpeg);

        }

        @Override
        public void onVideoTaken(File video) {
            super.onVideoTaken(video);
            mListener.onFragmentInteraction(Uri.fromFile(video));
        }
    });`

Specify image resolution

Hello! This is one of the best libraries for working with the camera now. But is it possible to specify a resolution for shooting? Now, as far as I understand, the library takes a picture in the maximum possible resolution and cuts it under the resolution of the sides of the device. Is it possible to make the application initially take a picture, for example, with a resolution of 1920 * 1080?

Crashes after using setLocation api

Experiencing some crashes when moving to front camera on some devices, due to the infamous native error setParameters() failed.

java.lang.RuntimeException: setParameters failed
at android.hardware.Camera.native_setParameters(Native Method)
at android.hardware.Camera.setParameters(Camera.java:1884)
at com.otaliastudios.cameraview.Camera1.start(Camera1.java:148)
at com.otaliastudios.cameraview.Camera1.setFacing(Camera1.java:245)
at com.otaliastudios.cameraview.CameraView$3.run(CameraView.java:755)

Dual Camera

Hi!

Can I use your library to work with two cameras at the same time?

As a basis I used your example, but I made two CameraView elements: masterCamera and slaveCamera.

Additionally, I changed the code for the button that switches the cameras.

`
int NextMode = 0;

@OnClick(R.id.toggleCamera)
void toggleCamera() {
    if (mCapturingPicture) return;

    masterCamera.stop();
    slaveCamera.stop();

    switch (NextMode) {
        case 0:
            masterCamera.start();
            masterCamera.setFacing(Facing.BACK);
            slaveCamera.setVisibility(View.GONE);
            NextMode = 1;
            break;
        case 1:
            masterCamera.start();
            masterCamera.setFacing(Facing.FRONT);
            slaveCamera.setVisibility(View.GONE);
            NextMode = 2;
            break;
        case 2:
            masterCamera.start();
            masterCamera.setFacing(Facing.BACK);

            slaveCamera.start();
            slaveCamera.setFacing(Facing.FRONT);
            slaveCamera.setVisibility(View.VISIBLE);

            NextMode = 3;
            break;
        case 3:
            masterCamera.start();
            masterCamera.setFacing(Facing.FRONT);

            slaveCamera.start();
            slaveCamera.setFacing(Facing.BACK);
            slaveCamera.setVisibility(View.VISIBLE);
            NextMode = 0;
            break;
    }
}`

As a result, the application does not always work correctly. After several camera mode switching, an error occurs and the application is closed.

09-04 12:53:56.284 3787-3837/com.mycom.myapp E/AndroidRuntime: FATAL EXCEPTION: CameraViewController Process: com.mycom.myapp, PID: 3787 java.lang.RuntimeException: getParameters failed (empty parameters) at android.hardware.Camera.native_getParameters(Native Method) at android.hardware.Camera.getParameters(Camera.java:1890) at com.otaliastudios.cameraview.Camera1.onStart(Camera1.java:149) at com.otaliastudios.cameraview.CameraController$1.run(CameraController.java:48) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.os.HandlerThread.run(HandlerThread.java:61)

I run tests on the Nexus 10 emulator (API 23, Android 6).

How to work with two cameras at once? Or is the error due to the emulator?

Recorded videos are not cropped

I used your application to implement capturing images, I use the crop output in XML to crop the image. This works fine, here is the code.

<com.otaliastudios.cameraview.CameraView
android:id="@+id/camera"
app:cameraJpegQuality="75"
app:cameraSessionType="video"
app:cameraWhiteBalance="auto"
android:keepScreenOn="true"
app:cameraCropOutput="true"
android:layout_width="wrap_content"
android:soundEffectsEnabled="false"
android:layout_height="@dimen/camera_crop_amount" />

I am now implementing capturing video, using the same XML properties. However, my video is not being cropped to the same size as the preview. Is there any reason why this happens? I am more than happy to provide additional information if required. Please let me know.

Just checked your demo app that doesn't seem to crop video output either.

P.S I am using the Samsung Galaxy S7

Thanks

Pinch Zoom laggy

The pinch zoom is really slow...
And thank you for helping with the last issue! :)

Error while starting/stopping the camera engine - Camera is being used after Camera.release() was called

As requested in #26, I'm opening a new issue:

Your latest changes seem to have solved the very most of the Camera is being used after Camera.release() was called issues. However, I'm afraid it's still not solved 100%. I got one more error:

Fatal Exception: com.otaliastudios.cameraview.CameraUnavailableException: Error while starting the camera engine.
       at com.otaliastudios.cameraview.CameraController$2.run(CameraController.java:107)
       at android.os.Handler.handleCallback(Handler.java:743)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:150)
       at android.os.HandlerThread.run(HandlerThread.java:61)
Caused by java.lang.RuntimeException: Camera is being used after Camera.release() was called
       at android.hardware.Camera.native_setParameters(Camera.java)
       at android.hardware.Camera.setParameters(Camera.java:2260)
       at com.otaliastudios.cameraview.Camera1.onStart(Camera1.java:224)
       at com.otaliastudios.cameraview.CameraController$2.run(CameraController.java:101)
       at android.os.Handler.handleCallback(Handler.java:743)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:150)
       at android.os.HandlerThread.run(HandlerThread.java:61)

Code lines are refering to the master branch of my fork using the extended error handling, but that shouldn't be a problem.

It's very seldom though and seems to be the case when the camera is stopped before it finished starting.

java.lang.RuntimeException: Camera is being used after Camera.release() was called

09-05 12:09:24.102 25020-25020/com.otaliastudios.cameraview.demo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.otaliastudios.cameraview.demo, PID: 25020
java.lang.RuntimeException: Camera is being used after Camera.release() was called
at android.hardware.Camera.native_setParameters(Native Method)
at android.hardware.Camera.setParameters(Camera.java:1878)
at com.otaliastudios.cameraview.Camera1.startAutoFocus(Camera1.java:693)
at com.otaliastudios.cameraview.CameraView.onGesture(CameraView.java:437)
at com.otaliastudios.cameraview.CameraView.onTouchEvent(CameraView.java:416)
at android.view.View.dispatchTouchEvent(View.java:9300)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2547)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2240)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2403)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1737)
at android.app.Activity.dispatchTouchEvent(Activity.java:2771)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68)
at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2364)
at android.view.View.dispatchPointerEvent(View.java:9520)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4230)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4096)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3787)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3844)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5922)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5896)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5857)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6025)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:323)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5417)

Demo Application crashes every time when we frequently switch application from foreground to background and vice versa.

NullPointerException in startVideo

I'm getting quite a lot NullPointers when users are trying to record a video:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.hardware.Camera.lock()' on a null object reference at com.otaliastudios.cameraview.Camera1.startVideo(Camera1.java:611) at com.otaliastudios.cameraview.CameraView.startCapturingVideo(CameraView.java:1153) at com.otaliastudios.cameraview.CameraView.startCapturingVideo(CameraView.java:1180)

So mCamera seems to be null here. The onCameraOpened event has already been triggered before. Unfortunately, I do not have any extended error logs as I only received the crash reports in Crashlytics. However, it seems to be device and os independent.

integration issue

Error:Execution failed for task ':app:processDebugManifest'.

Manifest merger failed with multiple errors, see logs

Video timer inconsistencies

I know you have already closed an issue similar to this, but I think you would understand best how to approach such an issue as you know how all of your code works. As the title says after hitting record I show a time elapsed.

I have used CountDownTimer:

`new CountDownTimer(10000, 1000) {

                    public void onTick(long millisUntilFinished) {
                        forcePressNext = true;
                        timerVideo.setText(20-millisUntilFinished/1000 + "s");
                    }

                    public void onFinish() {
                        timerVideo.setText("10s!");
                        if (forcePressNext == true) {
                            isRecording = false;
                            cameraView.stopCapturingVideo();
                        }
                    }
                }.start();`

It is quite inconsistent by 2/3s and the inconsistency gets larger on older devices, have you got any ideas?

thanks

decodeBitmap utility OOM with large pictures

FATAL EXCEPTION: FallbackCameraThread Process: camera_module, PID: 27112 java.lang.OutOfMemoryError: Failed to allocate a 63701004 byte allocation with 16777216 free bytes and 60MB until OOM at dalvik.system.VMRuntime.newNonMovableArray(Native Method) at android.graphics.Bitmap.nativeCreate(Native Method) at android.graphics.Bitmap.createBitmap(Bitmap.java:975) at android.graphics.Bitmap.createBitmap(Bitmap.java:946) at android.graphics.Bitmap.createBitmap(Bitmap.java:877) at com.otaliastudios.cameraview.CameraUtils.decodeBitmap(CameraUtils.java:137) at com.otaliastudios.cameraview.CameraUtils$1.run(CameraUtils.java:74) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:158) at android.os.HandlerThread.run(HandlerThread.java:61)

Maybe a lossless rotation could be done in native or with renderscript ?

<merge /> can be used only with a valid ViewGroup root and attachToRoot=true

Hi @natario1 !

After passing to the version 3.0 of Android Studio and to the version 27 of buildTools and support library, I had this crash immediately when I open the activity the CameraView is into. Maybe you have an idea about that?

Thank you for your work! 👍

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: fr.appsolute.teazit.dev, PID: 4772
                  android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:475)
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
                      at com.otaliastudios.cameraview.TextureCameraPreview.onCreateView(TextureCameraPreview.java:24)
                      at com.otaliastudios.cameraview.TextureCameraPreview.onCreateView(TextureCameraPreview.java:13)
                      at com.otaliastudios.cameraview.CameraPreview.<init>(CameraPreview.java:37)
                      at com.otaliastudios.cameraview.TextureCameraPreview.<init>(TextureCameraPreview.java:18)
                      at com.otaliastudios.cameraview.CameraView.instantiatePreview(CameraView.java:168)
                      at com.otaliastudios.cameraview.CameraView.instantiatePreview(CameraView.java:174)
                      at com.otaliastudios.cameraview.CameraView.onAttachedToWindow(CameraView.java:184)
                      at android.view.View.dispatchAttachedToWindow(View.java:13926)
                      at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2882)
                      at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2890)
                      at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2890)
                      at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2890)
                      at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2890)
                      at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2890)
                      at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2890)
                      at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2890)
                      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1311)
                      at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1073)
                      at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5988)
                      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
                      at android.view.Choreographer.doCallbacks(Choreographer.java:580)
                      at android.view.Choreographer.doFrame(Choreographer.java:550)
                      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
                      at android.os.Handler.handleCallback(Handler.java:739)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:135)
                      at android.app.ActivityThread.main(ActivityThread.java:5930)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)

Flipped Images or Mirrored Images

When taking an Image using the front camera, image appears to be flipped / mirrored. As of now I have handled this in my code using:

Matrix m = new Matrix();
m.preScale(-1, 1);

But this involves more processing as bytes[] are converted to bitmap and again bytes[] to perform file storage and displaying purpose.

Stretching out image

Hey,

We are having an issue with Camera view stretching and not showing in full screen for Galaxy tab 4 android version 5.0.2.

On other devices tested so far the view works fine.

See the screenshot

screen shot 2017-10-12 at 17 13 16

Small error: cameraJpegQuality 0 <= n <= 100

Apparently there is a small error in the documentation: the quality of the jpeg must be greater than 0 and less than or equal to 100 (0 < n <= 100).

If you try to set 0, then there will be an error:

java.lang.RuntimeException: Unable to resume activity {com.myapp.myapp/com.myapp.myapp.MainActivity}: java.lang.IllegalArgumentException: JPEG quality should be > 0 and <= 0

Switching SessionType while in another orientation stretches the preview

Hey,

My requirement is to have 4:3 aspect ratio for picture and fullscreen for video. In portrait this works fine when switching between PICTURE and VIDEO but if I rotate the device to landscape and switch the preview is stretched.

https://www.dropbox.com/s/z573aa0285lhaov/orientation_change_stretch.mp4?dl=0

Perhaps is there a way to disable the orientation and keep them in portrait or landscape, or manually set an orientation for this not to be stretched?

Thanks

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.