精华内容
下载资源
问答
  • 人工智能应用实例:图片降噪

    千次阅读 2015-01-12 14:43:15
    人工智能应用实例:图片降噪      场景设置  对白色背景、黑色前景的黑白图片进行降噪处理,可以假定背景部分多于前景。  图1 从左往右:原图、噪声图、降噪图      降噪模型  我们可以对图片建立...

    人工智能应用实例:图片降噪

     

     

     场景设置

       对白色背景、黑色前景的黑白图片进行降噪处理,可以假定背景部分多于前景。

     
       
     图1 从左往右:原图、噪声图、降噪图 

     

     

    降噪模型

        我们可以对图片建立这样一个两层的二维模型,底层表示原图,顶层表示任意的噪声图,xi为原图第i个像素,yi为噪声图第i个像素,xi、yi的取值只有1和-1,1表示白色,-1表示黑色。


    图2 图片模型

     

        显然,我们对噪声图任取的一个像素yi可以有以下3个推测:

     

            1、这个像素更加可能是白色,因为白色背景多于黑色前景。

            2、这个像素应该和它周围的几个像素颜色一致。

            3、如果不能确定这个像素在原图到底是白色还是黑色,那么更有可能原图就是现在噪声图的这个颜色,因为毕竟噪声像素是少量的,大部分像素维持了原图的颜色。

     

        基于此,可以对噪声图定义一个能量公式:
        注意:这里的xi、yi颠倒过来了,xi为噪声图,yi为原图。

     

        公式中三个参数都是正实数,第一项表示对噪声图每个像素的值求和,第二项表示对噪声图每个像素与之周围像素差异的求和,第三项表示噪声图像素与原图像素的差异求和。显然基于我们以上的3点推测,越接近原图,噪声图的能量值应该越低。

     

     

    降噪过程

        有了这样一个图片模型和噪声图能量公式,我们就可以对图片降噪了。图片降噪基于一个很简单的想法,我们对整个噪声图的每个像素扫描一次(也可以扫描多遍),看看每次改变该像素点的颜色能否使整个噪声图的能量值降低,如果能量值降低了,我们就接受这一次改动,否则,该像素颜色保持不变。

     

        不过,这里还存在一个问题,我们不可能取得能量公式中原图每个像素yi的值!其实这也无妨,可以简单地用每次降噪处理(一次只处理一个像素)得到的新的降噪图去逼近原图,而一开始采用的就是噪声图。因此,每次降噪处理都要计算两个能量值,一个是当前已经得到的降噪图(被用来逼近原图,即xi、yi都是自身)的能量值,另一个是改变一个像素颜色得到的图片(xi为自身,yi为前面得到的降噪图)的能量值。

     

     

    Java代码实现

        由于某些限制,代码实现中图片读写使用了十分复杂的手段,实际上可以通过Java的imageio包进行简化。

    另外,图片能量公式的3个参数这里采用了手动指定的方式:fa=0.0,fb=1.0,fc=2.1,还可以通过更加智能的算法自动学习得到,比如爬山算法、模拟退火算法、遗传算法。

     

    // ImageIOer.java
    /**
     * >  ImageIOer
     *   
     * ImageIOer is a class to read and save images,
     * and it implements IImageIO.
     * 
     * @author RuanShiHai
     */
    
    import java.awt.*;
    import java.awt.image.*;
    
    import java.io.*;
    
    import javax.imageio.*;
    
    
    public class ImageIOer {
        /**
         * Read a bmp image
         * @param filePath - the image file to read
         * @return an Image object of the image
         */
        public Image myRead(String filePath) {
            try {
                // the length of BMP file header
                int bfLen = 14;
    
                // the length of BMP information header
                int biLen = 40;
                FileInputStream fs = new FileInputStream(filePath);
                byte[] bf = new byte[bfLen];
                byte[] bi = new byte[biLen];
    
                // read BMP file header
                fs.read(bf, 0, bfLen);
                // read BMP information header
                fs.read(bi, 0, biLen);
    
                // pixels value of width
                int biWidth = ((((int) bi[7] & 0xff) << 24) |
                    (((int) bi[6] & 0xff) << 16) | (((int) bi[5] & 0xff) << 8) |
                    ((int) bi[4] & 0xff));
    
                // pixels value of height
                int biHeight = (((int) bi[11] & 0xff) << 24) |
                    (((int) bi[10] & 0xff) << 16) | (((int) bi[9] & 0xff) << 8) |
                    ((int) bi[8] & 0xff);
    
                // the number of bits of each pixel
                int biBitCount = ((((int) bi[15] & 0xff) << 8) |
                    ((int) bi[14] & 0xff));
    
                // the size of bytes of the image
                int biSizeImage = ((((int) bi[23] & 0xff) << 24) |
                    (((int) bi[22] & 0xff) << 16) | (((int) bi[21] & 0xff) << 8) |
                    ((int) bi[20] & 0xff));
    
                // only processes 24bits bmp image
                if (biBitCount != 24) {
                    fs.close();
    
                    return null;
                }
    
                // the number of bytes to be padded after each row
                int nPad = (biSizeImage / biHeight) - (biWidth * 3);
    
                // read pixels data from image into a byte array
                byte[] bRGB = new byte[biSizeImage];
                fs.read(bRGB, 0, biSizeImage);
                fs.close();
    
                int index = 0;
                int[] data = new int[biWidth * biHeight];
    
                // store pixels in an array of int type
                for (int i = biHeight - 1; i >= 0; i--) {
                    for (int j = 0; j < biWidth; j++) {
                        data[(i * biWidth) + j] = (((int) 255 << 24) |
                            (((int) bRGB[index + 2] & 0xff) << 16) |
                            (((int) bRGB[index + 1] & 0xff) << 8) |
                            ((int) bRGB[index] & 0xff));
                        index += 3;
                    }
    
                    index += nPad;
                }
    
                // create an Image object
                Toolkit kit = Toolkit.getDefaultToolkit();
                Image image = kit.createImage(new MemoryImageSource(biWidth,
                            biHeight, data, 0, biWidth));
    
                return image;
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("Caught exception in loadbitmap!");
            }
    
            return null;
        }
    
        /**
         * Store an Image as a bmp image file
         * @param image - Image object to be saved as a bmp image file
         * @param filePath - the name of the bmp image file
         * @return the Image object
         */
        public Image myWrite(Image image, String filePath) {
            try {
                File imgFile = new File(filePath + ".bmp");
                BufferedImage bi = new BufferedImage(image.getWidth(null),
                        image.getHeight(null), BufferedImage.TYPE_INT_RGB);
                Graphics2D biContext = bi.createGraphics();
    
                // get a BufferedImage object from an Image object
                biContext.drawImage(image, 0, 0, null);
                biContext.dispose();
                ImageIO.write(bi, "bmp", imgFile);
    
                return image;
            } catch (Exception e) {
                e.printStackTrace(System.out);
            }
    
            return null;
        }
    }

     

    // PictureNoise.java
    import java.awt.*;
    import java.awt.image.*;
    
    import java.io.*;
    import java.util.Random;
    
    import javax.imageio.*;
    
    public class PictureNoise {
    	private static final double rate = 0.1;
    	private static final double fa = 0;
    	private static final double fb = 1.0;
    	private static final double fc = 2.1;
    
    	public void generateAPicture() {
    		try {
    			int width = 640;
    			int height = 480;
    			// 创建BufferedImage对象
    			Font font = new Font("微软雅黑", Font.BOLD, 160);
    			BufferedImage image = new BufferedImage(width, height,
    					BufferedImage.TYPE_INT_RGB);
    			// 获取Graphics2D
    			Graphics2D g2d = image.createGraphics();
    			// 画图
    			g2d.setBackground(new Color(255, 255, 255));
    			g2d.setPaint(new Color(0, 0, 0));
    			g2d.clearRect(0, 0, width, height);
    			g2d.setFont(font);
    			g2d.drawString("Java", 140, 200);
    			g2d.drawString("Python", 40, 400);
    			// 释放对象
    			g2d.dispose();
    			// 保存文件
    			ImageIO.write(image, "bmp", new File("/home/ln/picture.bmp"));
    		} catch (Exception ex) {
    			ex.printStackTrace();
    		}
    	}
    
    	// generate a picture with noise
    	public Image getNoise(Image sourceImage) {
    		BufferedImage bi = new BufferedImage(sourceImage.getWidth(null),
    				sourceImage.getHeight(null), BufferedImage.TYPE_INT_RGB);
    		Graphics2D biContext = bi.createGraphics();
    
    		// get a BufferedImage object from an Image object
    		biContext.drawImage(sourceImage, 0, 0, null);
    		biContext.dispose();
    
    		// create an array of int type to store rgb values of each pixel
    		int[] rgbs = new int[bi.getWidth() * bi.getHeight()];
    
    		bi.getRGB(0, 0, bi.getWidth(), bi.getHeight(), rgbs, 0, bi.getWidth());
    
    		Random rd = new Random();
    		int index = 0;
    		for (int i = 0; i < bi.getHeight(); i++) {
    			for (int j = 0; j < bi.getWidth(); j++, index++) {
    				if (rd.nextDouble() < rate)
    					rgbs[index] = (rgbs[index] & 0xff000000)
    							| (~rgbs[index] & 0x00ffffff);
    			}
    		}
    
    		// create a new Image object
    		Toolkit kit = Toolkit.getDefaultToolkit();
    		Image image = kit.createImage(new MemoryImageSource(bi.getWidth(), bi
    				.getHeight(), rgbs, 0, bi.getWidth()));
    
    		return image;
    	}
    
    	public Image reduceNoise(Image sourceImage, double fa, double fb, double fc) {
    		BufferedImage bi = new BufferedImage(sourceImage.getWidth(null),
    				sourceImage.getHeight(null), BufferedImage.TYPE_INT_RGB);
    		Graphics2D biContext = bi.createGraphics();
    
    		// get a BufferedImage object from an Image object
    		biContext.drawImage(sourceImage, 0, 0, null);
    		biContext.dispose();
    
    		// create an array of int type to store rgb values of each pixel
    		int[] rgbs = new int[bi.getWidth() * bi.getHeight()];
    
    		bi.getRGB(0, 0, bi.getWidth(), bi.getHeight(), rgbs, 0, bi.getWidth());
    
    		int height = bi.getHeight(), width = bi.getWidth();
    		for (int i = 0; i < height; i++) {
    			for (int j = 0; j < width; j++) {
    				double dd;
    				int d1, d2, d3;
    
    				d1 = 2;
    				if ((rgbs[i * width + j] & 0x00ffffff) == 0)
    					d1 = -2;
    				d2 = 0;
    				int rc[][] = { { -1, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 } };
    				for (int k = 0; k < 4; k++) {
    					if (isValid(i + rc[k][0], j + rc[k][1], height, width)) {
    						if ((rgbs[(i + rc[k][0]) * width + j + rc[k][1]] & 0x00ffffff) == (rgbs[i
    								* width + j] & 0x00ffffff))
    							d2 += -2;
    						else
    							d2 += 2;
    					}
    				}
    				d2 *= 2;
    				d3 = -2;
    
    				dd = fa * d1 - fb * d2 - fc * d3;
    				if (dd < 0)
    					rgbs[i * width + j] = (rgbs[i * width + j] & 0xff000000)
    							| (~rgbs[i * width + j] & 0x00ffffff);
    			}
    		}
    
    		// create a new Image object
    		Toolkit kit = Toolkit.getDefaultToolkit();
    		Image image = kit.createImage(new MemoryImageSource(bi.getWidth(), bi
    				.getHeight(), rgbs, 0, bi.getWidth()));
    
    		return image;
    	}
    
    	private boolean isValid(int row, int col, int height, int width) {
    		return (row >= 0 && row < height && col >= 0 && col < width);
    	}
    
    	public static void main(String[] args) {
    		PictureNoise pictureNoise = new PictureNoise();
    		ImageIOer imageIOer = new ImageIOer();
    
    		pictureNoise.generateAPicture();
    
    		Image sourceImage = imageIOer.myRead("/picture.bmp");
    		Image noiseImage = pictureNoise.getNoise(sourceImage);
    
    		Image noNoiseImage = pictureNoise.reduceNoise(noiseImage, fa, fb, fc);
    
    		imageIOer.myWrite(noiseImage, "/picture_with_noise");
    		imageIOer.myWrite(noNoiseImage, "/picture_noise_processed");
    	}
    
    }

     

     

     

     

    展开全文
  • NULL 博文链接:https://marshal-r.iteye.com/blog/2170112
  • 人工智能应用实例:数字识别(神经网络)     场景设置  现提供一大堆8*8像素的图片,每张图片上面都是一个手写体的数字0-9,要求通过神经网络的方法,以其中一部分图片作为训练集生成一个数字识别的智能系统,...

    人工智能应用实例:数字识别(神经网络)

     

     

    场景设置

        现提供一大堆8*8像素的图片,每张图片上面都是一个手写体的数字0-9,要求通过神经网络的方法,以其中一部分图片作为训练集生成一个数字识别的智能系统,以剩下的图片检验数字识别系统的准确性。

     

        数据集已经过预处理程序从手写体数字0-9提取位图,分为训练集datatra.txt和测试集datatest.txt,文件格式:每一行数据为一条记录,表示一张图片,共有65个属性,前64个属性为该图片的位图特征向量(每个属性取值范围都是0-16),最后一个属性为该图片上面的数字值0-9。

     

     

    神经网络

        1、基本介绍

        神经网络是人工智能的一个重要分支,神经网络的模型是基于神经元的,每个神经元就是一个函数,把输入信号映射成特定的一个输出,然后这个输出信号又可以作为下一个神经元的输入信号,这样便形成一张错综复杂的神经网络。


    图1  神经元

     

        举个简单的例子,假设只有一个神经元,它接受3个信号输入,实现的函数功能为对所有输入信号求和,而实际上神经元对每个输入信号有一个权重,意义在于说每个输入信号对神经元的刺激程度是不一样的,不能同等对待。假设神经元对这3个输入的权重为(1, 3, 2),那么当输入为(4, 8, 5)的时候,输出为1*4+3*8+2*5=38。

     

        一般而言,要从给定的知识库训练一个神经网络系统,神经元的函数功能是已知的,目标就是学习一组最佳的对每个输入信号的权重。

     

       2、 线性回归

        下面谈一下大家耳熟能详的线性回归,在平面上有一堆散列的点,目标是求一条最大程度拟合这些点的直线。很显然地,这也可以看作一个单神经元的神经网络模型,它有两个输入:x和1,两者权重为w1、w0,执行的函数功能为g(x)=x,因此模型表达式如下:

     

        其中W=(w0, w1)是各个输入信号的权重向量,我们的目标就是求得使直线拟合程度最大的W。按照以前数学教的方法,我们定义了平方差和为误差衡量标准,然后通过对W的各个分量求导就能算出最佳的W,回顾一下下面几条式子吧!



     

        以上是数学证明了最佳的W的求解方法,但对计算机而言,这样求解是不科学的,因为实际问题往往复杂得多,并不能通过数学演算直接求得最终解。不要忘了计算机最喜欢做大量的运算了,上面求导的思想是很有价值的,开始我们只需要任意选定一组参数作为权重向量W的值,然后通过某种算法不停更新W的值,最终W就能收敛到最佳的W,更新算法如下:


    图2 权重更新算法

     

         因此,在线性回归这个场景下,我们得到

     

       3、 硬分类器(with a hard threshold)

        只要稍微修改一下线性回归的模型,我们就可以设计出一个线性分类器。


    图3 线性分类器
     

        比如上图所示,可以通过一条直线把二维平面的散列点分成两类,假定左上部分为分类1,右下为分类0,我们还是采取线性回归得到的直线方程hw(x)=w1*x+w0,令g(x,y)=hw(x)-y=w1*x+w0-y,这样把分类1的点代进方程g(x,y)将得到一个>0的值,而分类0将得到<0的值,因此通过g(x0,y0)的正负便能界定点(x0,y0)属于分类1还是分类0。还记得线性回归神经元的输入为X=(x,1),权重向量为W=(w1,w0),函数功能为g(x)=x吧,在这里我们要对神经元做一下修改,输入为X=(x,1,y),权重向量为W=(w1,w0,-1),模型表达式如下


     

        显然,hw(X0)=1表示X0对应的点属于分类1,hw(X0)=0表示X0对应的点不属于分类1,因此,模型的函数功能相当于判断给定的一个输入是否属于某一个分类。这里尽管模型的hw(x)表达式发生了变化,但是图2的权重更新算法仍然是适用的,W的每个分量更新表达式如下

     

        注意:式子中的y并不是点的y坐标,这里y的取值只有1和0,对每条记录都更新W一次,1表示该条记录属于给定的分类,0则不属于。

     

        4、软分类器(with a soft threshold)

        上面的分类器在人工智能里面被认为是with a hard threshold的,直译是硬门槛,其实就是hw(X)要么是1要么是0,要么属于这个分类要么不属于这个分类的意思,这么绝对的判断是不好的,应该避免,人工智能里面最常见的做法便是把它转换为概率,即属于这个分类的概率。

     

        把一个无穷范围的实数转换为0-1之间的小数的做法是

     

        因此,在硬分类器的基础上,再做进一步修改,最终得到的软分类器模型如下

     

        与之对应的权重更新表达式调整为

     

    数字识别

        介绍完神经网络大概的情况,终于要步入正题了,现在让我们来看一下数字识别与神经网络的联系。

     

        最容易而实际上也是不可行的想法是,我们的数字识别系统就是一个单神经元的神经网络模型,它有64个输入,输出为0-9之间的整数,表示一条记录属于哪一个数字分类。然而,正如我前边提到的,这么绝对的判断是不科学的,应该基于概率进行分类。

     

        因此,数字识别的神经网络应该由10个独立的神经元组成,它们具有相同的64个信号输入,而输出则各不相同,神经元分别编号0-9,编号i的神经元的输出表示该条记录属于数字分类i的概率,即图片上的数字为i的概率。于是,把同一张图片输入到这10个神经元,我们有理由相信,使得输出值最大的神经元的编号就是这张图片上面的数字值。

     

        我们仍然沿用上面的软分类器模型和权重更新表达式,对每条记录(即一张图片)更新一次W的值,其中权重更新表达式中的y表示该条记录属于给定分类的概率,因为每条记录的分类已经是确定的,要么属于该给定分类,要么不属于,因此y的取值只有1.0和0.0。另外值得注意的是,hw(x)表达式中,W*X的绝对值是一个不小的数,容易使hw(X)只取到接近0.0和1.0的值,为了避免这个问题,可以让W*X再除以一个固定的因子,比如360。

     

     

    代码实现

    /*
     * =========================================================================
     *
     *       Filename:  main.c
     *
     *    Description:  Neural Network
     *
     *        Version:  1.0
     *        Created:  2014年12月20日 21时28分12秒
     *       Revision:  none
     *       Compiler:  gcc
     *
     *         Author:  阮仕海
     *   Organization:  AI 选修班第8组
     *
     * =========================================================================
     */
    
    #define ALPHA 1.0
    #define FACTOR 360
    #define ATTR_COUNT 64
    #define TIMES 36
    #define FILE_TRA "digitstra.txt"
    #define FILE_TEST "digitstest.txt"
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    
    int main() {
    	FILE *fp_tra, *fp_test;
    	int times;
    	int digit, x[ATTR_COUNT]; // 每组数据对应的数字值以及位图属性数组
    	int tra_size = 0, test_size = 0, hit_size = 0;
    	double y[10]; // 数字类(0-9)数组,y[i]=1.0当且仅当i==digit,否则y[i]=0.0
    	double weight[10][ATTR_COUNT] = {0.0}; // 权重数组(对应数字分类0-9)
    	char line[256]; // 缓冲区读取文件一行
    	const char delim[] = ","; // 文件数据分隔符
    
    	// 打开训练数据文件
    	if ((fp_tra = fopen(FILE_TRA, "r")) == NULL)
    		exit(1);
    	times = TIMES;
    	// 重复读训练数据文件,对权重进行times次迭代更新
    	while (times--) {
    		// 文件指针指向文件开始处
    		rewind(fp_tra);
    		fgets(line, 255, fp_tra);
    		while (!feof(fp_tra)) {
    			int i;
    
    			if (times == 0)
    				tra_size++;
    			// 将文件一行处理为一组训练数据
    			x[0] = atoi(strtok(line, delim));
    			for (i=1; i<ATTR_COUNT; i++) {
    				x[i] = atoi(strtok(NULL, delim));
    			}
    			digit = atoi(strtok(NULL, delim));
    			for (i=0; i<10; i++) {
    				y[i] = 0.0;
    			}
    			y[digit] = 1.0;
    
    			double hw_x, wx;
    			int dig;
    			// 分别对数字分组0-9更新权重
    			for (dig=0; dig<10; dig++) {
    				// 计算hw(x)=1/(1+e^(-W*X))
    				wx = 0.0;
    				for (i=0; i<ATTR_COUNT; i++) {
    					wx += weight[dig][i]*x[i];
    				}
    				wx /= FACTOR;
    				hw_x = (double)1/(1+exp(-wx));
    
    				// 更新权重wi=wi+alpha*(y-hw(x))*hw(x)*(1-hw(x))*xi
    				for (i=0; i<ATTR_COUNT; i++) {
    					weight[dig][i] += ALPHA*(y[dig]-hw_x)*hw_x*(1-hw_x)*x[i];
    				}
    			}
    
    			// 读取文件下一行
    			fgets(line, 255, fp_tra);
    		}
    	}
    	fclose(fp_tra);
    
    	/*
    	// 打印权重(代码测试用)
    	int j, k;
    	for (j=0; j<10; j++) {
    		printf("For digit %d\n: ", j);
    		for (k=0; k<63; k++) {
    			printf("%.1lf, ", weight[j][k]);
    		}
    		printf("%.1lf\n\n", weight[j][k]);
    	}
    	*/
    
    	// 打开测试数据文件
    	if ((fp_test = fopen(FILE_TEST, "r")) == NULL)
    		exit(1);
    	fgets(line, 255, fp_test);
    	while (!feof(fp_test)) {
    		int i;
    
    		test_size++;
    		// 将文件一行处理为一组测试数据
    		x[0] = atoi(strtok(line, delim));
    		for (i=1; i<ATTR_COUNT; i++) {
    			x[i] = atoi(strtok(NULL, delim));
    		}
    		digit = atoi(strtok(NULL, delim));
    
    		double hw_x, wx;
    		int dig, target;
    		double max_posibility = -1.0;
    		// 分别对数字分组0-9计算概率
    		for (dig=0; dig<10; dig++) {
    			// 计算概率hw(x)=1/(1+e^(-W*X))
    			wx = 0.0;
    			for (i=0; i<ATTR_COUNT; i++) {
    				wx += weight[dig][i]*x[i];
    			}
    			wx /= FACTOR;
    			hw_x = (double)1/(1+exp(-wx));
    
    			// 更新目标数字值
    			if (hw_x > max_posibility) {
    				target = dig;
    				max_posibility = hw_x;
    			}
    		}
    
    		// 数字识别正确
    		if (target == digit)
    			hit_size++;
    
    		// 读取文件下一行
    		fgets(line, 255, fp_tra);
    	}
    	fclose(fp_test);
    
    	// 打印结果
    	printf("Training data size: %d\n", tra_size);
    	printf("    Test data size: %d\n", test_size);
    	printf("          Hit size: %d\n", hit_size);
    	printf("         Hit ratio: %.2lf%%\n", (double)hit_size/test_size*100);
    
    	return 0;
    }

     

         输出结果如下:
       
     

     

     

    展开全文
  • 最后,从严格意义上,写作软件特指不仅具备丰富的写作素材和写作资源,还能根据程序设计进行模块化处理,自动整合、自动联想、自动生成、自动创作的智能写作软件。目前,只有微软对联软件和大作家超级自动写作软件...

    公司技术培训中提到了Auto Narrative Writing,即自动写作。

    目前,本人也仅是使用VBA生成SQL statement(Insert语句),原理是字符串拼接。

    而这个自动写作,显然是更高级别的“字符串拼接”了。先学习基础吧。

    ---------------------------------------------------------------------------------------------------------------------------------------

    写作软件,又叫电脑写作软件或计算机辅助写作软件,顾名思义就是通过计算机软件帮助作者写作的辅助软件工具。
    关于“写作软件”这个概念有三种理解方式
    最早应用于写作的软件是编辑排版软件,如WP、WORD,等等,都家喻户晓。甚至Windows自带的“记事本”和“写字板”等等,都可以称为写作软件。
    其次,从一般意义上讲,写作软件特指能提供丰富的写作素材和写作资源的电脑软件。此类软件不仅具备丰富的写景、状物、叙事或实用文体等方面的素材库,还能提供例句、片段、范文等各种资源,对用户打开写作灵感、开阔阅读视野、增加知识储备量非常有益,如写作之星、作文之星、金山书信通、合同订立高手、卡片大师等。
    最后,从严格意义上,写作软件特指不仅具备丰富的写作素材和写作资源,还能根据程序设计进行模块化处理,自动整合、自动联想、自动生成、自动创作的智能写作软件。目前,只有微软对联软件和大作家超级自动写作软件可以称为这种意义上的写作软件。这种软件可以帮用户打开思维,辅助思考,甚至实现框架写作、章节写作、草稿写作甚至全文写作,引导用户真正实现“所欲即所想,所想即所得”。

    ------------------------------------------------------------------------------------------------------------------------------------------

    展开全文
  • 人工智能是一门贯穿性的综合学科,主要包含计算机、控制论、信息论、神经生理学、语言学,人工智能是从...目前人工智能应用领域比较多,具体如下: 机器人领域:人工智能机器人,如RET聊天机器人,它能理解人的语言...

    人工智能是一门贯穿性的综合学科,主要包含计算机、控制论、信息论、神经生理学、语言学,人工智能是从计算机应用系统角度出发,研究如何制造出人造的智能机器或智能系统,来模拟人类类智能活动的能,来延伸人类智能科学

    人工智能的应用实例:指纹识别、人脸识别、视网膜识别、虹膜识别、专家系统、智能搜索和博弈等

    目前人工智能应用领域比较多,具体如下:

    机器人领域:人工智能机器人,如RET聊天机器人,它能理解人的语言,用人类语言进行对话,并能够用特定传感器采集分析出现的情况调整自己的动作来达到特定目的

    语言识别领域:该领域其实与机器人领域有交叉,设计的应用是把语言和声音转换成可处理的信息,如语音开锁、语音邮件以及未来的计算机输入等方面

    图像识别领域:利用计算机进行图像处理、分析和理解,以识别各种不同模式的目标和对象的技术;例如人脸识别,汽车牌号识别等。

    专家系统:具有专门知识和经验的计算机智能程序系统,后台采用的数据库相当于人脑,具有丰富的知识储备,采用数据库中的知识数据和知识推理技术来模拟专家解决复杂问题
      人工智能、大数据、云计算和物联网的未来发展值得重视,均为前沿产业,多智时代专注于人工智能和大数据的入门和科谱,在此为你推荐几篇优质好文:
    1.人工智能时代,AI人才都有哪些特征?
    http://www.duozhishidai.com/article-1792-1.html
    2.大数据携手人工智能,高校人才培养面临新挑战
    http://www.duozhishidai.com/article-7555-1.html
    3.人工智能,机器学习和深度学习之间,主要有什么差异
    http://www.duozhishidai.com/article-15858-1.html


    多智时代-人工智能大数据学习入门网站|人工智能、大数据、物联网云计算的学习交流网站

    多智时代-人工智能大数据学习入门网站|人工智能、大数据、云计算、物联网的学习服务的好平台
    展开全文
  • 人工智能应用实例

    2021-04-03 22:37:18
    10大令人眼前一亮人工智能案例 http://cio.it168.com/a2017/0320/3105/000003105384.shtml 随着人工智能的不断进步,越来越多的企业开始关注。每个行业的企业都在试图找出如何更新解决方案来利用人工智能,或者如何...
  • 人工智能应用实例介绍 5.人工智能在城市设计中的应用探讨 人工智能的智慧城市简介 人机共舞时代的来临 什么是人工智能 C^N机器人总动员 人工智能定义 人工智能 是计算机科学的一个 Artificia 分支,研究包括机器 人...
  • 商业智能对企业的价值以及产生价值的路径和过程不断应用于实践领域对组织的竞争优势和组织绩效产生重要影响。那么商业智能的研究框架是什么呢?我们从以下三点来为大家讲解。 商业智能的影响 在提高组织绩效的背景...
  • 原标题:python人工智能项目实战,PDF+源码 《python人工智能项目 Intelligent Projects Using Python》实施机器学习和深度学习方法,使用Python构建智能,认知AI项目主要特点帮助您掌握AI算法和概念的入门指南8个...
  • 目前,围绕人工智能的各种探讨已经百花齐放,似乎不说点“人工智能”就赶不上时代潮流,下面让我们简单回顾一下百年来人工智能程碑式的一些应用实例。 1914年世上第一个计算机游戏 西班牙发明家Leonardo Torres y ...
  • 22nd ITS World Congress, Bordeaux, France, 59 October 2015 Paper number ITS-1794 Solutions for integrated mobility in urban regions 1 Michael Kieslinger 1Fluidtime Data Services GmbH, Austria Neubaug
  • C-AHS Cooperative Automated Highway System Contents I. Outline II. Background III. Target IV. Details for C-AHS V. Future Plan 1 Outline 3 2-1 Background Society Tech. As is To be Machine- CO2 Human-
  • Outlook future developments cooperative detection Robbin Blokpoel, Senior Researcher Imtech Traffic&Infra Traffic Central developments Charm: PCP project Main title including Dutch and English highwa
  • Leveraging Data to Optimize Commercial Supply Chain Networks Paul Trombino III Director Iowa Department of Transportation Agenda Statewide Freight Network Optimization Project Overview Case Study fro
  • Challenges in C-ITS deployment Niels Peter Skov Andersen General Manager, CAR 2 CAR Communication Consortium 06/10/2015 22nd ITS World Congress 1 CAR 2 CAR Communication Consortium The C2C-CC is a no
  • Big Data in Transportation 2015 ITS World Congress, Bordeaux, France Mark Cantelli, VP and CTO October 2015 Industries are Embracing Big Data Businesses are producing data at an unprecedented rate to
  • Business solutions: What technology can deliver Innovative and effective solutions Jo van Onsem Group President Xerox Xerox in Intelligent Transport Systems Members of ERTICO, ITS America, UK, Austra
  • 22nd ITS World Congress, Bordeaux, France, 59 October 2015 Paper number ITS-2058 Coordinating its services on a national traffic control center Rui Ribeiro1, Carlos Costa2, Luis Batista2 1....
  • 27/10/2015 Smarter Traffic For Smarter Cities Kortrijk 1 27/10/2015 How technology can ease city traffic Three projects 1. How to manage the limited parking space in your city? 2 27/10/2015 The situa
  • Connected Automated Driving Risks and Benefits Dr.-Ing. Tobias Strau Karlsruhe Institute of Technology, Germany IBEC3 Evaluation of Connected Automated Driving Daimler KIT University of the State of
  • Delivering Intelligent Mobility- overcoming the challenge of data silos Standardization drives Adoption Tanja Jorzig Manager Go-to-Market Public Sector Making Sense of a World in Motion We are the la
  • EU-US-JAPAN Trilateral Cooperation Steering Group Government Only Co-Chair: Takumi Yamamoto, MLIT/Ken Leonard, ITS-JPO US-DOT /Colette Maloney, EC DG CONNECT Coordinating Group EU-US WG Co-Chair: Hid
  • Global Events and related R/D Projects in Korea 1 Contents I. Global Events II. Smart Highway III. C-AHS(Cooperative Automated Highway System) IV. Testbed and Demo 1-1 25th World Road Congress, Seoul
  • Cooperative ITS Corridor Joint Deployment Frans op de Beek Rijkswaterstaat Nomadic devices as an accelerator for market penetration Bild: Hessen Mobil Straen- und Verkehrsmanagement End 2023 Dutch po
  • The European ITS Platform+ a key player to support future ITS deployment plans. Pave the way for future ITS development Ing. Federica Polce Italian Ministry of Infrastructure and Transport The Europe
  • LTE-V2X: A Cellular-Assisted V2X Communication Technology Jiansong Gan, Ph. D. ganjiansong@huawei.com Huawei Technologies Huawei at a Glance 228 Main title ~170,000 Ranking in the Fortune Employees G
  • 22nd ITS World Congress, Bordeaux, France, 59 October 2015 Paper number ITS-2710 Automated control of transport corridors module in UIRNet project for custom management 1* 2 3* Tommaso Scubla , Filip
  • C-ITS Deployment Challenges Chris Koniditsiotis CEO Transport Certification Australia About Transport Certification Australia CITS offers a solution to a series of existing problems but true innovati
  • Key Enablers for Electric Vehicles and other Sustainable Transport Solutions in Brazil Adriano Galindo Leal, Ph.D. Electrical Engineer Viajeo PLUS International Coordination for Implementation of Inn

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 683
精华内容 273
关键字:

人工智能应用实例