精华内容
下载资源
问答
  • 2021-06-08 13:38:56

    随着魅族 16s 的正式发布,今年各家都已经完成了年度旗舰机的布局,安卓阵营除了华为以外,自然是清一色的高通骁龙 855 处理器和多摄组合。

    不过有许多用户肯定发现一个问题,曾经去年大火的由苹果引领的 Face ID 人脸识别技术,今年好像都统统哑了火,去年采用刘海屏的厂商要么发力真全面屏,要么干脆直接上了更高屏占比的水滴屏。那么苹果曾经应以为傲的 Face ID 技术为什么没有引发技术革命呢?

    第一,Face ID 技术本身就有很高的技术壁垒,Face ID 技术是由专业极光扫描仪制造商 Finisar 所提供的。并且需要结构光发射器和接收器、前置摄像头、还有 TOF 接近传感器四个组件共同运作,这其中的技术大部分厂家是搞不定的,所以去年只有小米、OPPO 和华为荣耀三家大厂发布了搭载这项技术的手机产品。

    第二,我们上面说了因为这项技术的复杂,需要四个组件构成,那么如果其中任意一个组件坏掉的话,那么整个 Face ID 系统就无法使用,需要全部更换,这也造成 Face ID 这套组件没有传统的指纹识别耐用。并且,如果一旦出现问题,用户将花费更大的代价去维修。

    第三,Face ID 真的没有苹果说得那么方便,有很多 iPhone X 用户反映,自己在侧躺床上,只露出半边脸的时候,手机就无法识别自己的脸了。并且手机放在桌子上的时候来了消息,要么你把脸凑过去,要么你就只能拿起手机才能看得到消息,一点都没有传统指纹那种出爽快感。

    第四,因为凡是搭载了 Face ID 功能的手机,要么就做一个丑丑的刘海屏,要么就做一个比如滑盖的机械式结构。后者会造成结构过于复杂,导致诸多不稳定性,前者更是会导致手机正面的样子不太好看,大部分用户也真的不喜欢这样的设计。

    综上所属安卓阵营今年大部分的手机都采用了屏下指纹技术,Face ID 正逐渐被主流市场所抛弃,可能到了最后苹果自己也不会再用这一套系统。而 Face ID 可能会和当年的 3D Touch 一样,只是昙花一现。根据 iPhone XR 的市场表现和最近供应链的消息,3D Touch 在下一代 iPhone 极有可能会被全面淘汰。

    也许未来,苹果会探索出更好的手机安全解决方案,来代替这个目前看起来各方面都有妥协的 Face ID,这也是苹果一直以来对手机体验的追求。

    更多相关内容
  • FaceID SDK使用教程

    2017-10-26 18:27:02
    检测一张照片中的人脸,人脸比对,活体检测,等一系列的操作
  • Face ID还有一点做得比较棒的是,他会检测是否睁眼,微软没有进行检测,可能这是算法不同造成的吧。但不管怎么样,检测是否睁眼,能够有效避免有人在你熟睡时拿着你的设备对着你解锁你的设备。测试了一下Surface Pro...

    Face ID还有一点做得比较棒的是,他会检测是否睁眼,微软没有进行检测,可能这是算法不同造成的吧。但不管怎么样,检测是否睁眼,能够有效避免有人在你熟睡时拿着你的设备对着你解锁你的设备。测试了一下Surface Pro 4的人脸识别,本人不戴眼镜,这种情况下夜间关灯环境不影响识别;找了一副蛤蟆墨镜和一副黑框眼镜后无法识别;然后在设置中选择提高识别能力,录了一下带黑框眼镜面部,再佩戴蛤蟆墨镜也能正常识别速度与之前一样。

    ff3963edaf53f1849332129bdfedad49.png

    与Face ID类似技术的应该是微软的Windows Hello。这种类型的人脸识别是基于红外发射器以及红外摄像头的,能够避免环境光对人脸识别的影响。同时也可以避免用照片或者3D打印(这点存疑)脸模欺骗人脸识别的尴尬,并且识别效率非常高,从脸进入摄像头附近能捕捉到稳定图像到解锁大约1s。对了,刚刚测试了一下,遮住不到1/4张脸也能识别成功。

    8c49fc5cfb8b762d802e2c1cd54d8109.png

    Face ID 是未来,未来是人工智能,而人工智能更多的是依赖情绪感。所以苹果 Face ID 进行解锁、支付、环境感知只是第一步,而接下来要做的就是情绪感知,一旦有了情绪感知之后,就可以针对用户的情绪进行更多的人工智能的场景服务,有了情绪感知之后,未来的手机将更加人性化和智能化。

    展开全文
  • Android制造 FaceID [FaceNet + MobileNet]

    千次阅读 2018-11-01 15:42:55
    碰巧Apple的新iPhone X搭配了Face ID进行刷脸,我有一个想法,给Android做一个类似的Face ID。我这里主要使用2015年Google发的一篇论文FaceNet: A Unified Embedding for Face Recognition and Clustering 和201...

    1. Abstract

    好久没有在简书上写文章,最近在弄关于人脸识别的内容和研读一些论文。碰巧Apple的新iPhone X搭配了Face ID进行刷脸,我有一个想法,给Android做一个类似的Face ID。我这里主要使用2015年Google发的一篇论文FaceNet: A Unified Embedding for Face Recognition and Clustering 和2017年Google发布的一个MobileNet模型MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

    2. Method and Related Work

    2.1. FaceNet

    FaceNet是一个Face identification的训练模型。我认为其最大的不同是损失函数。在我现阶段的知识范畴里面,Face Recognition通常的训练方法是利用softmax函数做分类,然后用cross_entropy作为损失函数(使用max likelihood)。然而在Face identification中是不太符合的,因为我们需要的判断两张脸是否相同,而不是判断这个脸的类别,因此我们需要计算两张脸之间的相似度,通过给定的threshold判断是否为同一个人。这才是identification的需要。

    2.1.1 Triplet Loss

    triplet loss就是代替我们熟悉的cross_entropy损失函数,作为训练网络模型的损失函数。我们组织三元组(anchor, positive, negative)作为一个样本,其中anchor为基准人脸图片,positive与anchor都是同一个人的图片,negative与anchor不是同一人的照片。我们希望anchor与positive的距离小于anchor与negative的距离。

    anchor与positive的距离小于anchor与negative的距离

    这里的alpha是一个positive距离和negative距离之间margin。因此我们有这样一个损失函数:

    Triplet Loss

    若 anchor和positive的距离 + alpha值 <= anchor和negative的距离,Triplet Loss就为正,若大于alpha值Triplet Loss为0。

    Triplet learning

    这是Triplet Loss学习的目标,anchor作为标准,positive与anchor是同类,negative与anchor不同。简单来说,我们尽可能让negative远离anchor,让positive靠近anchor。

    2.1.2 Triplet Selection

    对于Triplet Loss这个损失函数,我们需要选择一个合理的三元组。假如我们选择一个满足损失函数的三元组,那么Triplet Loss总是为0而且其梯度也是为0。因此我们需要选择一个违背Triplet Loss的三元组进行训练,这样才有意义。那么我就选择一组 anchor与negative的距离 - anchor与positive的距离 < alpha。选择步骤如下:

    1. 我们选择anchor和positive应该是针对有多张人脸照片的人,在这个人的人脸照片中两两组合成为<anchor, positive>的二元组
    2. 根据选择好的<anchor, positive>的二元组后,我们计算其他照片与<anchor, positive>差距小于alpha的negative。由于每pair <anchor, positive>都可能存在多个negative照片。我们每次随机选取一个negative组成<anchor, positive, negative>,因为可以保证我们尽可能学习每一张图片避免了poor training。
    3. 对于以上步骤我们在每一个mini batch的时候需要重新计算一次,因为这种组成<anchor, positive, negative>是很多的。假如有100个人,每个人有平均有4张照片,我们起码有100 * 4 * 3 / 2 = 600个。这是很不适合一次性计算全局所有的triplet sample。因此我们每次从不同人取照片样本和学习完一遍triplet sample时,应该重新计算获得triplet sample。这样才有机会学习不同的triplet sample。

    2.2 MoblieNet

    MoblieNet是Google今年4月出的内容,它是对CNNs在尽可能减少其准确率的情况下去缩减模型的MFLOPs和Million parameters。其当中主要的方法有两个:

    • 1 x 1 convolution
    • depthwise convolution
      其实这两个不是什么新的东西,在Inception v1 到 v4都有出现过。但是没想到两者结合可以如此有效。

    Depthwise + Pointwise

    假设输入数据大小为D_F × D_F × M,而最后需要输出是大小为D_F × D_F × N。如上图,标准的卷积操作需要运算时间大约是:

     

    standard convolutions have the computational cost

    而在MobileNet中,我们先对数据进行depthwise convolution操作,所谓的depthwise convolution就是有M个D_K × D_K × 1的filter对输入对应的channel进行卷积操作,如下图:

     

    Depthwise convolution

    最后得到一个D_F × D_F × M features map。
    接下来我们就对depthwise convolution操作后得到的features map进行一个1 x 1的卷积操作,每个filter kernel的大小为1 x 1 x M一共N这个的kernel。最后我们就得到一个大小为D_F × D_F × N的features map。

    与标准卷积操作得到相同大小的features map,但是计算复杂度为:

     

    depthwise convolutions + pointwise convolution

     

    第一项是depthwise conv的计算复杂度,第二项是pointwise conv的计算复杂度。对比起标准的卷积操作,我们需要的浮点计算量和参数存取容量少了很多:

     

    浮点运算量对比

    左图是标准卷积后再进行Batch Normal和ReLu操作,右图是没进行一次卷积都进行Batch Normal和ReLu操作

    按照论文里面说:理论上,相比于标准卷积操作少8到9倍的运算量,足够在移动设备上面运行。但作者认为还可以再继续把运算量降下去,那就是使用Width Multiplier。所谓的width multiplier,就是一个标量乘子,它的目的是减少每层channel的数量。本来该层有64 channels,而我们设置的width multiplier为0.5,那么该层有32 channels,但同时模型的精确度也会相应的降低。

    在github上面我们可以找到mobileNet用tensorflow的实现:https://github.com/Zehaos/MobileNet

    这是MobileNet对不同年份ImageNet winner进行对比

     

    我们可以看到当MobileNet的width multiplier为1且image大小为224 x 224时,其得分超越了GoogleNet。那是多么振奋人心的事情。

    3. IDea

    其实很明显我们就是用FaceNet的tripletloss作为损失函数,用MobileNet作为CNNs模型进行训练,最后嵌入到android手机上。而Face detection我们使用android sdk上面的FaceDetectionListener来进行人脸检测。获取到最主要Face(可以采用面积最大作为主要主要的Face)的矩阵我们进行一些对齐操作以后,我们就可以放入网络当中获得该脸的embedding向量。在录入Face ID信息时(也就是获取embedding向量时),我们需要多次录入同一个脸的信息,因为多个embedding我们可以增加判断的鲁棒性,或者你对这些embedding求一个平均值来作为最终的Face ID,当然这只是一个baseline啦。要记住以防那些搞事的人用不同的人脸录入信息,我们需要在每次录入后判断该次录入脸部信息(embedding向量)与之前几次的embedding向量的欧式距离是否小于某一个threshold。好啦,最后我们就是在解锁时候,获取主要人物的脸部图片求出对应的embedding向量再与录入时的embedding算他们之间欧式距离是否小于某一个threshold值,若小于我们可以判断该人是同一个人,解锁,否则相反。

    4. Conclusion

    在MobileNet的论文当中,我们可以看到作者也把MobileNet融入到FaceNet进行训练,相对于苹果iPhone X而言,Google早已对移动设备进行Face identification做好了准备。其结果如下:

     

    MobileNet 在FaceNet当中的效果

     

    其实MobileNet是17年4月份的产物,相对比较新的是Face++的shuffleNet。它是基于MobileNet的一个移动设备上面的CNNs,无论模型的浮点运算量还是在ImageNet上面的准确率都比MobileNet更胜一筹。shuffleNet加入的group操作后使得卷积操作更加快和轻,这里我就不详细解释啦,毕竟我还没认真看,我总结完的话有机会跟大家分享一下。

    很抱歉,因为我个人时间和能力有限,仅仅用LFW的数据集对MobileNet的模型进行训练,但还没融入到android手机上面。可能我们还需一些时间去学习和完成相关的android代码。假如我写出来希望能分享给各位。

    5. References



    作者:Salon_sai
    链接:https://www.jianshu.com/p/62514315757f
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    展开全文
  • React Native集成Touch IDFace ID

    千次阅读 2018-11-12 14:20:23
    前言: 使用Touch ID也称为指纹身份验证在移动应用程序中非常流行。Touch ID功能可保护应用程序并使其成为用户的无缝身份验证流程。...使用iPhone X,我们可以使用Face ID身份验证。Touch ID和Fac...

    前言:

    使用Touch ID也称为指纹身份验证在移动应用程序中非常流行。Touch ID功能可保护应用程序并使其成为用户的无缝身份验证流程。

    许多银行应用程序,如美国银行,发现,大通,使用Touch ID身份验证,实现安全和无缝的身份验证。

    用户无需在每次登录时键入长密码,只需允许他们使用Touch ID登录即可。

    使用iPhone X,我们可以使用Face ID身份验证。Touch ID和Face ID身份验证都改善了用户与移动应用的互动,使其更加安全。

    在这篇文章中,我们将使用流行的react-native-touch-id库集成Touch ID和Face ID身份验证。

    安装

    使用react-native-touch-id库安装相当简单。

    如果您正在使用yarn运行以下命令:

    yarn add react-native-touch-id

    如果您是npm用户,请运行以下命令:

    npm i --save react-native-touch-id
    

    确保使用以下命令链接库:

    react-native link react-native-touch-id
    

    安装完成后,我们需要将应用程序权限添加到android和iOS文件中。

    在AndroidManifest.xml中添加:

    <uses-permission android:name =“android.permission.USE_FINGERPRINT”/>
    

    在Info.plist中添加:

    <key> NSFaceIDUsageDescription </ key> 
    <string>启用Face ID可让您快速安全地访问您的帐户。</ string>
    

    完成上述步骤后,您就可以开始在应用程序中使用react-native-touch-id库了。

    用法

    在下面的简单示例中,我们将创建一个组件FingerPrint.js。

    用于验证用户Touch ID的函数是来自react-native-touch-id库的authenticate(reason,config)函数。

    TouchID.authenticate(原因,配置)

    此功能使用Touch ID或Face ID进行身份验证,并返回promise对象。reason是显示给用户的可选字符串。它可以提供有关需要身份验证的原因的信息。config是可选的对象,可以有更多的细节在对话框中显示。

    import React, {Component} from 'react';
    import {
        AlertIOS,
        StyleSheet,
        Text,
        TouchableHighlight,
        View,
        NativeModules
    } from 'react-native';
    import TouchID from 'react-native-touch-id'
    
    class FingerPrint extends React.Component {
    //config is optional to be passed in on Android
        const optionalConfigObject = {
            title: "Authentication Required", // Android
            color: "#e00606", // Android,
            fallbackLabel: "Show Passcode" // iOS (if empty, then label is hidden)
        }
    
        pressHandler() {
            TouchID.authenticate('to demo this react-native component', optionalConfigObject)
                .then(success => {
                    AlertIOS.alert('Authenticated Successfully');
                })
                .catch(error => {
                    AlertIOS.alert('Authentication Failed');
                });
        }
    
        render() {
            return (
                <View>
                    <TouchableHighlight onPress={this.pressHandler}>
                        <Text>
                            Authenticate with Touch ID
                        </Text>
                    </TouchableHighlight>
                </View>
            );
        }
    };
    

    在上面的示例中,您可以观察到pressHandler()函数使用TouchID.authentication()函数处理用户的Touch ID身份验证。如果由于某种原因验证失败,则返回错误代码。

    所有生物识别身份验证错误代码都可以在 官方苹果文档 中找到

    TouchID.isSupported()

    此功能可让您知道是否支持生物识别身份验证。它解析为一串TouchID或FaceID。

    下面的示例显示了isSupported()函数的用法。

    clickHandler(){
        TouchID.isSupported()
            .then(biometryType => {
    // Success code
                if (biometryType === 'FaceID') {
                    console.log('FaceID is supported.');
                } else if (biometryType === 'TouchID') {
                    console.log('TouchID is supported.');
                } else if (biometryType === true) {
    // Touch ID is supported on Android
                }
            })
            .catch(error => {
    // 如果用户的设备未启用touchID或faceID,则为失败代码
                console.log(error);
            });
    }
    

    react-native-touch-id库支持使用Face ID for iPhone X设备。
    isSupported()函数返回设备支持和启用的生物统计类型。
    如果设备不支持Touch ID或Face ID,那么我们将不得不回退使用密码或密码。

    请注意,在调用authenticate()函数之前,需要调用isSupported()函数。这可确保在生物识别身份验证不可用时,我们不会使用此库进行身份验证。在这种情况下可以使用回退认证机制。

    把它们放在一起

    下面的代码显示了使用react-native-touch-id进行身份验证的已清理版本。请注意,我们将biometryType保存到组件的状态。我们需要确保向用户提供正确的消息,告知他们是否使用Touch ID或Face ID进行身份验证。

    'use strict';
    import React, {Component} from 'react';
    import {
        AlertIOS,
        StyleSheet,
        Text,
        TouchableHighlight,
        View,
    } from 'react-native';
    import TouchID from "react-native-touch-id";
    
    export default class FingerPrint extends Component<{}> {
        constructor() {
            super()
            this.state = {
                biometryType: null
            };
        }
    
        componentDidMount() {
            TouchID.isSupported()
                .then(biometryType => {
                    this.setState({biometryType});
                })
        }
    
        render() {
            return (
                <View style={styles.container}>
                    <TouchableHighlight
                        style={styles.btn}
                        onPress={this.clickHandler}
                        underlayColor="#0380BE"
                        activeOpacity={1}
                    >
                        <Text style={{
                            color: '#fff',
                            fontWeight: '600'
                        }}>
                            {`Authenticate with ${this.state.biometryType}`}
                        </Text>
                    </TouchableHighlight>
                </View>
            );
        }
    
        clickHandler() {
            TouchID.isSupported()
                .then(authenticate)
                .catch(error => {
                    AlertIOS.alert('TouchID not supported');
                });
        }
    }
    const styles = StyleSheet.create({
        container: {
            flex: 1,
            justifyContent: 'center',
            alignItems: 'center',
            backgroundColor: '#F5FCFF'
        },
        btn: {
            borderRadius: 3,
            marginTop: 200,
            paddingTop: 15,
            paddingBottom: 15,
            paddingLeft: 15,
            paddingRight: 15,
            backgroundColor: '#0391D7'
        }
    });
    
    function authenticate() {
        return TouchID.authenticate()
            .then(success => {
                AlertIOS.alert('Authenticated Successfully');
            })
            .catch(error => {
                console.log(error)
                AlertIOS.alert(error.message);
            });
    }
    

    搞定!您现在已将生物识别身份验证集成到React Native应用程序中。

    现在,当用户设备上没有Touch ID或Face ID时,您可以浏览应用的UI和不同后备选项。

    请记住,当您在登录时存储用户密码和敏感信息时,您必须将它们存储在安全的钥匙串中。react-native-keychain库为React Native提供钥匙串访问,使您的应用程序安全。

    展开全文
  • 小米今日在深圳舉辦發表會,推出年度旗艦小米 8,此外,還非常驚喜的推出具備 Face ID 和螢幕下指紋辨識功能的小米 8 透明探索版。小米 8 透明探索版手機外觀超酷,採用透明被蓋設計,可以直接看到手機內部的零件。...
  • 虹软人脸识别 - faceId及IR活体检测的介绍前几天虹软推出了 Android ArcFace 2.2版本的SDK,相比于2.1版本,2.2版本中的变化如下:VIDEO模式新增faceId(类似于之前文章中提到的trackId)新增IR活体检测功能新增IR、...
  • React Native指纹扫描仪是一个库,用于使用指纹(TouchID)对用户进行身份验证。 目录 iOS版本 TouchID的使用基于名为Local Authentication的框架。 它提供了一个默认视图,提示用户将手指放在iPhone的按钮上进行...
  • face id与人脸解锁Unlocking your phone using your face is the new hotness, mostly thanks to Apple’s Face ID. Android has had a similar feature since 2015 calledTrusted Face, but it’s not even close ...
  • 允许您的用户注册物理身份验证设备(iPhone和Macs上的FaceID或TouchID,Android上的指纹,Windows上的Hello和USB密钥)以跳过输入登录凭据的操作。 允许您的用户使用FaceID / TouchID登录允许您的用户注册物理身份...
  • 可以说比较容易实现:只需要获取BizToken,再起调腾讯SDK即可1、首先登录腾讯云平台,申请权限,创建应用腾讯云:...文件目录 完整项目:https://download.csdn.net/download/meixi_android/11...
  • Android 集成Face++ 人脸识别(3.0+SDK)

    千次阅读 2018-12-01 17:52:18
    最近项目需求需要输入用户真实姓名 身份证号 再去调用人脸识别 效验是否是本人 所以就首先关注了Face++(旷视)的人脸识别,听说是 正确率很高.....所以就集成了. 1.首先去官网去创建应用(其实听说创建应用是比较...
  • "The Matrix" face for Android Wear By Dheera Venkatraman http://dheera.net/ This project is released under the GNU General Public License. Feel free to hack at it and share your contributions. ...
  • android-Camera.Face

    2021-06-05 03:39:55
    Camera.Facepublic static class Camera.FaceextendsObject↳android.hardware.Camera.FaceThis class was deprecated in API level 21.We recommend using the newInformation about a face identified through cam...
  • Android中播放视频主要有两种方式: 使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型 使用android自带的VideoView,这种方法太简单就不介绍了 使用SurfaceView+MediaPlayer,这种方式...
  • 自定义控件(类似按钮等)的使用,自定义一个SurfaceView。 如某一块的动态图(自定义相应),或者类似UC浏览器下面的工具栏。 如下图示例: 自定义类代码: 代码如下: public class ImageSurfaceView extends ...
  • 本文实例讲述了Android开发之使用ExifInterface获取拍照后的图片属性。分享给大家供大家参考,具体如下: ExifInterface exif = new ExifInterface(file.getPath()); String widthStr = exif.getAttribute...
  • 本文实例为大家分享了android surfaceView实现播放视频的具体代码,供大家参考,具体内容如下 RelativeLayout <?xml version=1.0 encoding=utf-8?> <RelativeLayout xmlns:android=...
  • 接着上一个问题,解决了SurfaceView闪屏问题之后(//www.jb51.net/article/101909.htm),又有了一个新的问题。现在我想设置含有fragment+viewpager的activity横屏。其中一个fragment有视频播放功能,含SurfaceView....
  • Surface的拍照实现也是很简单,一个小demo就可以把流程看懂了。... android:id=@+id/sv_main_surface > <Button android:layout_width=match_parent android:layout_height=wrap_content android:onC
  • 接触了这么久的View,总不能一直停留在View里,现在开始呢,就要学习一个新的知识点:SurfaceView,...LinearLayout xmlns:android=http://schemas.android.com/apk/res/android xmlns:tools=http://schemas.android
  • import java.io.ByteArrayOutputStream; import org.json.JSONArray;...import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import a
  • 一、概述 今天给大家带来SurfaceView的一个实战案例,话说自定义View也是各种写,一直没有写过SurfaceView,这个玩意是什么东西?什么时候用比较好呢? 可以看到SurfaceView也是继承了View,但是我们并不需要去实现...
  • Android通过支付宝进行刷脸认证 官方文档快速接入 一、简介 支付宝刷脸认证是通过支付宝人脸识别进行身份校验,主要包括三个模块身份认证初始化服务、开始认证、认证结果查询 二、应用场景 认证场景码 FACE SMART_...
  • 本文实例讲述了Android编程之SurfaceView用法。分享给大家供大家参考,具体如下: 关于surfaceView相关知识: View和SurfaceView主要区别: 1. View只能在UI线程中刷新,而SurfaceView可以在子线程中刷新 2. ...
  • 首先是最终实现的效果图: 先分析一下雨滴的实现: 每个雨滴其实就是一条线,通过 canvas.drawLine() 绘制 线(雨滴)的长度、宽度、下落速度、透明度以及位置都是在一定范围内随机生成 每 draw 一次然后改变雨滴...
  • SurfaceView和TextureView均继承于android.view.View 与其它View不同的是,两者都能在独立的线程中绘制和渲染,在专用的GPU线程中大大提高渲染的性能。 一、SurfaceView专门提供了嵌入视图层级的绘制界面,开发者...
  • 前文简单介绍了Android中SurfaceView的基本使用,本文就来介绍一下SurfaceView与多线程的混搭。SurfaceView与多线程混搭,是为了防止动画闪烁而实现的一种多线程应用。android的多线程用法与JAVA的多线程用法完全...
  • 本文实例讲述了Android基于OpenGL的GLSurfaceView创建一个Activity实现方法。分享给大家供大家参考,具体如下: Android提供了两个基本的类让我们使用OpenGL ES API来创建和操纵图形:GLSurfaceView和 GLSurfaceView...
  • Android的Camera相关应用开发中,有一个必须搞清楚的知识点,就是Camera的预览方向和拍照方向 图像的Sensor方向:手机Camera的图像数据都是来自于摄像头硬件的图像传感器(Image Sensor),这个Sensor被固定到手机...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,146
精华内容 3,258
关键字:

android faceid