Android 拍照功能详解

Android——调用摄像头拍照 上传头像的简单原理 阅读详情

Android拍照功能相信都不陌生。这篇文章总结下Android拍照功能的具体知识。

这里写图片描述


分两种场景:

  • 场景一,拍照然后显示照片在页面;
  • 场景二,拍照然后将照片以文件方式存储。

简单的拍照功能

原理:调用系统的Camera应用生成一张照片

1.要求系统支持拍照功能
<manifest ... >
    <uses-feature android:name="android.hardware.camera"
                  android:required="true" />
    ...
</manifest>

在AndroidManifest.xml中注册相机权限,这样在支持拍照功能的手机上允许安装应用。如果手机系统不支持拍照功能,则不允许安装应用程序。

2.使用Camera App拍照
static final int REQUEST_IMAGE_CAPTURE = 1;

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
}

方法中用到一个resolveActivity(),该方法返回intent可以操作的第一个Activity。使用该方法可以防止Intent启动过程出现空指针异常

3.处理缩略图

Camera应用程序将照片作为小的位图发送到onActivityResult()的Intent中,key值为data。

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == REQUEST_IMAGE_CAPTURE){
            Bundle bundle = data.getExtras();
            Bitmap bitmap = (Bitmap) bundle.get("data");
            mImageView.setImageBitmap(bitmap);
        }
    }

上面介绍了使用Android系统的Camera应用生成一个缩略图,如果我们希望获取完整的拍照图片,我们需要以File的形式来存储拍摄照片。

保存完整的拍照图片

保存拍照图片为完整的文件,关键是得到图片的Uri,然后用Intent调起拍照的时候将文件的Uri放入MediaStore.EXTRA_OUTPUT参数中。

1.首先添加文件的写入权限
<manifest ...>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    ...
</manifest>
2.创建文件目录
String mCurrentPhotoPath;

private File createImageFile() throws IOException {
    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = "JPEG_" + timeStamp + "_";
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
        imageFileName,  /* prefix */
        ".jpg",         /* suffix */
        storageDir      /* directory */
    );

    // Save a file: path for use with ACTION_VIEW intents
    mCurrentPhotoPath = image.getAbsolutePath();
    return image;
}

getExternalFilesDir(Environment.DIRECTORY_PICTURES)方法获取到的文件目录是在:

Android/data/包名/files/Pictures

当然,你可以将图片放到任何位置,比如SDCard中、Public目录中等等。该方法可以作为一个文件目录创建的参考。

3.拍照操作
static final int REQUEST_TAKE_PHOTO = 2;

private void dispatchTakePictureFileIntent() {
        Uri photoURI;
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            File photoFile = null;

            try {
                photoFile = createImageFile();

                if (photoFile != null) {

                    //根据不同的系统版本处理文件目录访问的方式
                    if(Build.VERSION.SDK_INT >= 24){
                        photoURI = FileProvider.getUriForFile(this,
                                "com.camerademo.fileprovider",
                                photoFile);
                    }else {
                        photoURI = Uri.fromFile(photoFile);
                    }

                    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
                    startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

因为Android7.0以后改变了文件的Uri操作方式。Android7.0需要通过FileProvider来获取文件的Uri路径。

Android7.0及以上获取到的Uri为:file:// URI
Android7.0以前获取到的Uri为:content:// URI
FileProvider配置

因此,我们需要在AndroidMainfest.xml里面指定我们的FileProvider:

<application>
   ...
   <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.camerademo.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths"></meta-data>
    </provider>
    ...
</application>

注意:这里的authorities就是上面代码FileProvider.getUriForFile()中的对应的名称。resource下面的file_paths是在values->xml目录下的file_paths文件

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="my_images" path="Android/data/com.camerademo/files/Pictures" />
</paths>

这里可以指定path的目录,也可以将path目录滞空。


图片压缩

使用相机拍照生成的照片往往好几兆,当我们显示在页面上的时候根本不需要显示像素这么高的图片,不仅会增大我们应用的内存消耗,有时候甚至会导致应用内存泄漏,因此在显示照片的时候我们都要做图片的压缩处理。

private void setPic() {
    // Get the dimensions of the View
    int targetW = mImageView.getWidth();
    int targetH = mImageView.getHeight();

    // Get the dimensions of the bitmap
    BitmapFactory.Options bmOptions = new BitmapFactory.Options();
    bmOptions.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
    int photoW = bmOptions.outWidth;
    int photoH = bmOptions.outHeight;
    Log.e("wj","压缩前的图片宽高:" + photoW + "*" + photoH);

    // Determine how much to scale down the image
    int scaleFactor = Math.min(photoW/targetW, photoH/targetH);

    // Decode the image file into a Bitmap sized to fill the View
    bmOptions.inJustDecodeBounds = false;
    bmOptions.inSampleSize = scaleFactor;
    bmOptions.inPurgeable = true;

    Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
    Log.e("wj","压缩后的图片宽高:" + bmOptions.outWidth + "*" + bmOptions.outHeight);
    mImageView.setImageBitmap(bitmap);
}

我们看下图片在处理前和处理后,大小区别

09-05 14:20:49.972 18911-18911/com.camerademo E/wj: 压缩前的图片宽高:1840*3264
09-05 14:20:50.192 18911-18911/com.camerademo E/wj: 压缩后的图片宽高:460*816

图片压缩也是我们常用方法之一。该方法可以当做图片压缩的一个处理的参考。


至此拍照功能介绍结束。

最后我们考虑这样一个问题,我们在上面存储拍照后的图片使用的文件路径是getExternalFilesDir(),该路径只能在我们应用内访问,系统不会将该图片添加到系统的Media Provider中,也就是说我们无法在其他应用中通过Media Scanner功能发现该照片。
要想让其他应用可以通过媒体搜索发现我们拍照生成照片,我们需要发送一个系统广播,通知系统将我们的照片路径下的照片文件添加到系统的Media Provider 的database中。

private void galleryAddPic() {
    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    File f = new File(mCurrentPhotoPath);
    Uri contentUri = Uri.fromFile(f);
    mediaScanIntent.setData(contentUri);
    this.sendBroadcast(mediaScanIntent);
}

欢迎大家留言交流。

Android拍照的方式:调用系统相机、自定义 Camera 相机、相册、拍照 阅读详情

相关推荐

Android拍照选图功能实现与FileProvider详解

在Android应用开发中,系统相机调用和相册选图是常见的功能需求。随着Android版本的迭代,特别是从Android 7.0开始引入的FileProvider机制,开发者需要处理URI权限和文件共享的安全性问题。FileProvider通过content:// URI替代传统的file:// URI,有效防止文件暴露风险。本文以Kotlin为例,详细解析如何实现拍照、选图和裁剪功能,重点介绍FileProvider的配置方法、不同Android版本的兼容处理,以及常见问题的解决方案。针对移动应用开发中的

既是过河之卒,惟有奋力向前。 352

Android 之 使用 Camera 拍照

另外,有一点要说的就是假如carema没有释放掉的话,那么下次调用carema就会报错, 报错内容是:java.lang.RuntimeException:fail to connect to camera service 所以,需要对Carema进行release();这模糊的AV画质...毕竟是编码过后的Bitmap,对了,拍完的图片是不会保存到本地的, 我们可以自己写代码把图片保存到我们的SD卡里,然后再显示,这样的图片会清晰很多, 嗯,我们写代码来试下~//定义一个保存图片的File变量。

leyang0910的博客 1871

QtAndroid详解 3 startActivity实战Android拍照功能

QtAndroid详解 3 startActivity实战Android拍照功能

jfdfhh的博客 528

调用摄像头拍照和选择相册

1.activity_main.xml 布局文件      xml version="1.0" encoding="utf-8"?> LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools

ESUCC的博客 1289

Android 实现拍照功能,并将图片保存到本地存储

前言: 实现拍照功能的主要步骤: 创建照相机对象 设置相机参数 对照片预览 照片拍摄 获取照相机所得到的图片数据,从而可以进行下一步的活动,例如保存到本地存储,进行数据压缩,通过可视化组件显示。 停止照相 首先是布局页面activity_camera_demo.xml,用户点击进来后,通过设置完相应的参数后,对摄像头得到照片进行预览,通过TextureView实现 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xml

路宇的博客 1万+

Android拍照功能开发实战详解

自Android早期版本起,相机功能便作为移动设备的核心能力之一被广泛集成。随着硬件升级与API演进,拍照已从简单的图像捕获发展为涵盖人脸识别、二维码扫描、AR叠加等复杂场景的技术基础。系统相机调用简单、兼容性强,适用于大多数通用场景;而自定义相机(如Camera2/CameraX)提供更精细的控制,适合需要预览定制、手动调参或增强现实融合的专业应用。开发者需权衡开发成本与功能深度进行选择。的核心在于通过 XML 文件声明哪些私有目录可以被临时授权共享。该配置文件通常命名为,需放置于。

weixin_42593701的博客 807

android拍照功能编程,Android编程实现手机拍照的方法详解

本文实例讲述了Android编程实现手机拍照的方法。分享给大家供大家参考,具体如下:今天弄了差不多一天手机拍照,后来,边弄边想,而且现在也不知道自己知道的这些对不对,首先,如果使用此种方式拍照的话,程序在模拟器中,刚启动就会出问题,不知道什么原因,猜可能是因为是模拟器的原因,目前没有手机进行测试,这一些无法解释,代码如下:Intent intent = new Intent(MediaStore....

weixin_26763955的博客 637

Android拍照与图库选择功能实战详解

在移动应用开发中,图像采集功能已成为不可或缺的一部分,广泛应用于头像设置、商品上传、社交分享等场景。Android系统提供了丰富的API支持拍照和从图库中选择图片的功能,开发者可以通过调用系统相机或图库意图(Intent)实现快速集成。本章将初步介绍Android平台上图像采集的核心机制,涵盖系统相机调用、图库访问、权限控制及图片数据获取等关键技术点。通过理解这些基础概念,开发者能够为后续章节中深入实现拍照、图片选择与处理功能打下坚实基础。

weixin_30838971的博客 793

QtAndroid详解(3):startActivity实战Android拍照功能

终于到了使用 QtAndroid 的时候了,这次会结合实例详细讲解 QtAndroid 名字空间中最重要的 startActivity() 方法的使用……

安晓辉生涯——聚焦程序员的职业规划与成长 1万+

Android动态取景框拍照功能实现详解

通过Camera API操作Android设备的相机时,几乎所有的配置工作都是通过Camera.Parameters类来进行的。这个类封装了相机的所有可用参数,开发者可以根据需要获取或设置这些参数以达到预期的拍摄效果。获取当前相机的参数列表可以通过Camera对象的方法来实现,这个方法会返回一个Camera.Parameters对象,该对象包含了当前相机的所有可设置参数。设置参数列表,则需要使用方法。

weixin_32242475的博客 1120

python如何实现点云可视化交互——Open3D实例教程(获取所选点的信息)保姆级教学

python如何实现点云可视化交互——Open3D实例教程(获取所选点的信息)保姆级教学

qq_45912037的博客 1万+

android 三星调用拍照功能吗,详解三星GALAXY Camera超方便的拍照功能

1自动模式很省心 轻松拍摄不用愁三星GALAXY Camera可以算是一款非常革命性的产品,将传统的小尺寸长焦机与高性能的4核心移动设备融合起来也算得上是史无前例的事情。当然了如果只是用史无前例来形容的话那么大家肯定会怀疑笔者是不是在吹牛皮,所以我们就来详细讲一讲三星GALAXY Camera。自动模式很省心 轻松拍摄不用愁既然是一款相机,我们首先就要来讲一讲他的拍摄功能,三星GALAXY Cam...

weixin_28933027的博客 770

在 CentOS Stream 10 上搭建 Kubernetes 集群并支持开发调试与日志查看

搭建 Kubernetes 集群的每个步骤详细的文档。

灵犀物润 1637

Android: Camera相机开发详解(中) ——实现预览、拍照、保存照片等功能

前言 在上一篇文章中给小伙伴们介绍了进行Camera开发需要了解的知识点,如果你还没有看过的话,建议先去看上一篇文章《Android: Camera相机开发详解(上) —— 知识储备》 本篇文章会带着小伙伴们一步一步实现自己的Camera,并在实现的过程中验证上一篇中所讲解的结论 实现思路: 在xml布局中定义一个SurfaceView,用于预览相机采集的数据 给SurfaceHolder添加回调,在surfaceCreated(holder: SurfaceH...

arraiy的专栏 9277

LLM大模型基础知识【一】

大语言模型(LLM):是指在自然语言处理(Natural Language Processing,NLP)领域中的一类大模型,通常用于处理文本数据和理解自然语言。这类大模型的主要特点是它们在大规模语料库上进行了训练,以学习自然语言的各种语法、语义和语境规则。例如:GPT系列(OpenAI)、Bard(Google)、文心一言(百度)。视觉大模型:是指在计算机视觉(Computer Vision,CV)领域中使用的大模型,通常用于图像处理和分析。

lin_xi_xi的博客 2872

形位公差标注的常见误区与优化策略

本文深入解析机械设计中形位公差标注的常见误区与优化策略,特别针对NX2406用户提供实用技巧。从标注冗余、基准选择到公差值设定等五大误区入手,结合工程图实例展示如何提升标注精度与效率,帮助工程师避免常见错误,优化设计流程,确保零件功能实现与制造可行性。

info6的博客 244

Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能

转自:https://www.jianshu.com/p/0ea5e201260f 前言 在前几篇文章中介绍了如何调用系统相机拍照和使用Camera1的实现自定义相机拍照、人脸检测等功能 文章传送门: Android:调用系统相机实现拍照+裁切(兼容7.0以上系统) Android: Camera相机开发详解(上) —— 知识储备 Android: Camera相机开发详解(中) ——...

飞翔的小鸟 7634

吃透 AM32 无人机电调:从源码架构到工作原理的全方位解析(附实践指南)(上)

本文深入解析了AM32电调固件的源码架构与核心模块实现。文章首先介绍了AM32电调作为开源无人机;动力心脏的重要地位,随后从硬件基础、源码目录、模块划分三个维度构建解析框架。重点剖析了系统初始化模块的时钟配置、GPIO初始化和定时器设置,以及FOC控制模块的坐标变换算法、角度估算和SVPWM生成等关键技术实现。通过逐行代码解析,揭示了电调如何将飞控指令转换为电机驱动的完整过程,为开发者理解AM32电调工作原理提供了系统性指导。

bother3000的博客 6553

android开发自动拍照,Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能...

android.jpg前言在前几篇文章中介绍了如何调用系统相机拍照和使用Camera1的实现自定义相机拍照、人脸检测等功能文章传送门:接下来的几篇文章中,我将给大家介绍如何使用Camera2实现自定义相机以及在实现过程中遇到的问题。(实现效果及源码在文末给出)一、Camera2架构概述Camera2架构图:camera2架构.jpgCamera2引用了管道的概念将安卓设备和摄像头之间联通起来,系统...

weixin_33514163的博客 1106

从原理到实战:深入解析 Synopsys VCS 仿真快照技术,提升验证效率

VCS Checkpoint 技术摘要 VCS Checkpoint 是 Synopsys VCS 提供的仿真状态快照功能,可将完整的仿真状态(寄存器、存储器、时钟、随机种子等)序列化保存。主要应用场景包括:跳过耗时初始化阶段、覆盖率驱动验证、Debug复现和UVM分阶段验证。核心原理是对仿真内核状态的完整序列化,需注意文件句柄等特殊对象需手动处理。 使用方式: 编译时添加 -checkpoint 选项 运行时通过 $save 系统任务或 +checkpoint 参数保存状态 通过 +restore 参数恢

元直的博客 247

HFSS实战项目——高带外抑制特性SIW带通滤波器

本文对单级滤波器和双级滤波器的设计、工作原理及仿真结果进行了详细分析,并验证了双级SIW带通滤波器在性能方面的优越性,为微波通信系统中滤波器的设计和应用提供了重要参考。

2401_87464239的博客 1812

xamarin 拍照功能和相册浏览功能,c#源码详解,兼容android sdk 5.0至8.0

原来以为拍照比较简单,后来发现android对拍照的权限根据不同的版本要求不同,储存的权限也是要求动态或取的,动态或取其实讲白了,就是要app主动去获取,同事在xml也要写权限。本人花了一些时间整理了一下给大家。源文件在我的下载里。 最后鄙视一下那些自恃清高(大学霸)的人,一边卖着xamarin稀少的资源,一边管开发者们叫“伸手党”,令人反感。博客精神就是开源开放,...

u014194297的博客 2277

RK3566-预装APP

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

qq_24093081的博客 701

android拍照保存照片方向,Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能...

android.jpg前言在前几篇文章中介绍了如何调用系统相机拍照和使用Camera1的实现自定义相机拍照、人脸检测等功能文章传送门:接下来的几篇文章中,我将给大家介绍如何使用Camera2实现自定义相机以及在实现过程中遇到的问题。(实现效果及源码在文末给出)一、Camera2架构概述Camera2架构图:camera2架构.jpgCamera2引用了管道的概念将安卓设备和摄像头之间联通起来,系统...

weixin_32154109的博客 1529

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: IntentService详解
下一篇: MVP设计模式浅析、实战
mo_android
博客等级 码龄9年 12粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值