Profile - CN184


CN184

基于Linux的虚拟试妆台

重庆大学
通信工程学院


Finals


[print]


Project

Name of Project:基于Linux的虚拟试妆台

Contact Information

Name:邢岚
E-Mail:annxl@126.com
Telephone:13527463417
Mobile Phone:13527463417
Mailing Address:重庆大学A区主教学楼2411

Contest Advisor

Name:何伟
E-Mail:hewei007@cqu.edu.cn
Telephone:13908381077

Members

No.NameE-MailEnglish Name
1邢岚annxl@126.comXing lan
2高湛395019814@qq.comGao zhan
3蔡春花caichunhua123@163.comCai chunhua

Project Paper - view as Preliminary(2010/06/01), Final(2010/09/18), Draft, Latest

1. 设计概述 (Preliminary Paper)

1 设计概述

 

1.1 设计意图

 

随着社会的发展进步,人们对自身仪表形象的而要求越来越高,化妆成为女性朋友们的一门必修课。然而对于化妆初学者来说,如何选对适合自己的化妆品的颜色却是一项难题。求助于色彩分析师以及职业彩妆师的费用昂贵自不必说,到商场产品柜台一遍一遍地试用也是费时费力,而且从顾客的角度来说,反复试妆不仅繁琐,而且多人试用同一瓶试用装,也存在卫生隐患。此外,随着网络购物的兴起,在购买化妆品之前无法试妆成为化妆品的网络销售的瓶颈。

针对以上问题,我们设计了一种虚拟试妆系统来帮助广大彩妆消费者挑选适合自己的化妆品。本作品采用Altera公司提供的Quartus IISOPC Builder进行系统设计,依托Cyclone FPGA丰富的可编程资源,以带MMUNIOS II CPU为核心,Nios-Linux操作系统作为底层平台,通过移植的轻量级图形库FTK GUIAPI接口编写应用程序。顾客可以直接通过本系统的摄像头采集自己的面部影像,通过触摸屏来选择喜欢的产品并按照自己的化妆方式进行试妆。

 

1.2 适用范围及针对的用户群

 

本系统主要应用于各种实体类店铺,如各大商场和超市的化妆品专卖区以及各类高档化妆品专卖店,方便顾客通过虚拟的方式进行试用选购。

本系统主要针对的用户群包括化妆品店和美容美发店中的广大消费者。由于化妆品类消费的顾客范围很广,并且本系统具有方便灵活、简单易用的特点,因此将会有广阔的市场前景。

 

1.3 选用Altera器件及Linux操作系统进行设计的原因

 

l  丰富的外围设备。由于本系统移植了图形库需要大量的存储空间,我们选用Altera DE2-70作为开发平台。其FPGA核心为数量高达70,000个逻辑单元的Altera Cyclone II 2C70。平台上具有大容量的内存组件,丰富的多媒体、储存及网络等应用接口。同时,对于此开发平台Altera提供了大量的教材和各种说明范例,容易上手。

l  灵活高效的SOPC解决方案,SOPC(片上可编程系统)Nios II处理器、存储器、I/O口等系统设计需要的功能模块集成到一个FPGA上,构件成一个可编程的片上系统。具有灵活的设计开发定制外设,满足复杂的外设要求。

l  本系统中使用的某些算法用硬件实现相对困难,而用软件实现的方式则容易得多。Altera提供的NIOS II软核系统可以根据我们的要求定制处理器,这样就大大减少了开发的难度,便于算法的软件实现。

l  在本系统开发中引入Linux操作系统,能有效提高CPU的利用率,简化复杂系统的开发难度。

 

(Revision: 3 / 2010-08-26 22:47:07)

2. 功能描述 (Final Project Paper)

2 功能概述

本系统以SD卡为存储媒介,以数据库的形式按照腮红、眼影、唇彩分类存储有各种颜色的化妆品。采用500万像素的摄像头采集顾客的面部信息,用户可以通过触摸屏浏览、选择化妆品对影像进行上妆,上妆效果实时显示在触摸屏上。同时本系统还提供部分模板影像供顾客选择,顾客可以选择与自己唇形,脸形相近的图片进行上妆,观察上妆效果,选择适合自己的化妆品。

2.1为系统功能示意图。

2.1系统功能示意图

 

2.1 基本功能

 

l        面部信息采集:使用CMOS摄像头对顾客准备试装的面部区域(如唇部)进行拍照,以提取可供处理的面部数据信息。并将其存入SSRAM中,供上妆时使用。

l        商品浏览:在DE2-70平台上扩展触摸屏模块,顾客可在触摸屏上浏览商品。

l        实时化妆:顾客选定喜欢的化妆品品牌,及相应的颜色,即可在触摸屏上显示出接近真实的上妆效果。

l        数据库更新:由于化妆品信息均以数据库的形式存放在SD卡中,因此可以通过SD卡添加最新化妆品的数据信息

l        图像保存功能:本系统提供SD卡和USB接口,顾客可通过移动存储介质保留满意的试妆效果图片。

 

2.2 扩展功能

 

l        网络维护:管理员通过访问本平台的网页,能够轻松的维护,更新数据库中的产品信息。

 

 

 

(Revision: 4 / 2010-08-26 22:47:40)

3. 性能参数 (Final Project Paper)

3 性能参数

 

3.1 硬件性能参数

 

3.1.1 DE2-70性能参数:

l  FPGACyclone II 2C70 FPGA70,000 LEs 

l  内存:SDRAM 232-Mbyte SDRAMSRAM 12-Mbyte SRAMFlash memory 8-Mbyte Flash   内存

l  SD card socket支持SPI以及SD 1-bit两种SD Card读取模式

l Altera EPCS16序列EEPROM

l 传输接口10/100MHz以太网络控制器和接头

l USB界面:USB/从控制器

l Clock输入50MHz振荡器28.63MHz振荡器

 

3.1.2 TRDB_LTM性能参数

l 显示尺寸:4.3英寸

l 长宽比:15:9

l 显示模式:透射式显示

l 有效面积:93.6×56.16(mm)

l 点阵数目:800×RGB x 480(dots)

l 颜色数:1600万色

 

3.1.3 TRDB_D5M性能参数

l 有效像素:2592H×1944V

l 像素大小:2.2μm×2.2μm

l 高数据率

l 超强低光性能

l 灯泡曝光模式:支持任意次数的曝光

l 快照模式:获取需要的图像帧

 

3.1.4 SD

l 支持类型:SD1.1 / SD2.0

l 读写速率:>= 1MB/s

l 容量:4 GB

 

3.2 系统资源使用情况

3.1系统资源使用情况

3.3  Linux内核+文件系统

3.2 压缩的Linux内核+文件系统

 

(Revision: 2 / 2010-08-26 22:51:27)

4. 设计结构 (Preliminary Paper)

4 设计结构

 

本系统以DE2-70为核心,外接PS键盘录入各种信息,通过两个扩展口分别接入LTM触摸屏和D5M 500万像素摄像头。通过软件应用程序在触摸屏上显示交互界面,通过触摸与键盘数据与用户互动,摄像头则负责采集用户影像,实现实时试妆。另外,化妆品数据存储在大容量SD卡中,可随时取出进行更新维护工作。图4.1是系统示意图。

4.1智能试妆系统结构示意图

4.1 硬件结构

 

硬件平台采用Altera公司的SOCP Builder工具设计了基于带MMUNIOS II CPUAvalon总线的片上系统架构。采用SDRAM作为系统的程序和数据运行空间,SSRAM则作为LTM显示缓存和摄像头图像采集的数据区,CFI Flash作为内核及文件系统的存储空间,同时EPCS保存硬件设计的配置文件。通过USB ControllerSD Card ControllerUSB大容量存储器及SD卡进行管理。

我们采用Altera University Program IP Cores中的Video模块对LTM进行显示管理,同时采用PS2模块实现与键盘的通信。使用友晶公司提供的DM9000 Controller管理网络芯片。

4.2系统硬件结构示意图

4.2 软件结构

 

软件使用NIOS Wiki上的Linux操作系统(nios2-linux-20090929.tar),我们根据硬件系统特点对内核进行裁剪,直接利用内核的部分驱动如MMC/SD卡驱动、USB主机控制器驱动、PS2键盘驱动等。同时利用类似代码对部分自定义模块进行驱动代码移植,如framebuffer驱动、触摸屏驱动等。

我们在framebuffer驱动的基础上移植了一个轻量级图形库,并针对当前系统特点进行代码优化和裁剪。程序包含两个线程,一个线程初始化系统并读取系统配置文件,之后开启另一个线程,该线程调用GUIAPI函数创建用户界面,实现试妆的交互功能。

4.3系统软件结构图

 

(Revision: 4 / 2010-08-26 22:51:57)

5. 设计方法 (Final Project Paper)

5 设计方法

 

5.1 设计概述

 

本系统以带MMUNIOS II CPU为核心,以Linux操作系统作为底层平台,以图形库作为应用接口,通过avalon总线接口的自定义模块与LTMPS/2键盘、SD卡等硬件设备相接。通过Linux驱动模型管理自定义模块的相应驱动,通过轻量级图形库FTK GUIAPI接口编写应用程序。

 

5.2 硬件系统设计

 

5.2.1 SOPC系统配置

5.1是本设计的SOPC系统配置图。

 

5.1    SOPC系统配置

 

5.2.2 CMOS摄像头数据采集

CMOS摄像头数据采集是本系统最重要的硬件实现,图5.2展示了实时采集并显示CMOS中图像的逻辑框图。

 

 

 

5.2   实时图像采集结构图

 

当来自NIOS II CPU的图像采集信号有效时,CMOS摄像头采集图像数据,经过SSRAM_WRITE模块重新拼接,同时生成SSRAM的写地址。并在NIOS II CPUSSRAM的读请求无效时开始忽略CPU的任何写请求,将图像数据存入SSRAM中;反之若读请求有效,则Pixel Buffer提取SSRAM中的图像数据并将其送至LTM显示屏显示。SSRAM_2PORT的作用即是NIOS II CPU的图像采集信号有效,且读请求无效时,将图像数据存入SSRAM;在读请求有效时将SSRAM中的图像数据送至LTM显示。

 

① CMOS摄像头

 

实时图像采集是为了实现捕获实时用户图像进行虚拟试妆的功能。本系统采用TRDB_D5M CMOS摄像头。该摄像头可工作在多种模式下,本系统将其配置为1600×960模式,数据读出模式使用4X进行抽取,从而使捕获的图像分辨率为400×240。该摄像头有效像素为2592H×1944V。输出数据采用Bayer pattern格式,包含四种单色信息:绿1、绿2、红、蓝(G1G2RB)这四种单色代表了三个滤色器。输出时,有效图像部分的第一行(偶数行)的像素点由G1R交替显示,第二行(奇数行)的像素点由G2R交替显示。虽然G1G2的色彩滤镜相同,但是却被数据通路和模拟信号链路当作两个不同的颜色来处理。摄像头在Dval信号有效期间所产生的数据为有效数据。

 

 

5.3    CMOS摄像头像素色彩模式细节图(右上角为顶点)

 

摄像头数据采集、配置模块

该部分实现的主要功能包括:通过I2C总线对摄像头进行配置,调整摄像头的曝光度、RGB增益、分辨率等;获取摄像头采集到的实时图像数据。该模块将图像数据整理成各位12bitRGB数据。

 

③ SSRAM_WRITE模块

自行编写的Verilog硬件模块,当CPU发出图像采集命令时,且Dval有效时,该模块开始接收摄像头数据采集、配置模块发送的图像数据,并将图像数据重新拼接成32-bitRGB数据,同时生成对应的SSRAM写地址。摄像头数据采集、配置模块传递过来数据格式为:每个像素点共36-bit数据,其中RGB三个分量各占12bit。首先,该模块分别提取RGB分量的高565bit的数据,拼接成16-bitRGB565数据;然后,将两个像素的RGB565数据合并成32bit。同时生成对应的21-bit SSRAM地址,用以将两个像素的数据存入SSRAM中。由于在本系统中,仅需要将实时图像显示在LTM的特定区域,而非全屏,所以,该模块在重组数据及生成地址时,都有一定的约束条件。

 

④ SSRAM_2PORT模块

自行编写的Verilog硬件模块,其作用是对CPUSSRAM_WRITE的读写请求做出仲裁。当需要采集实时图像时,CPU发出采集图像的命令,SSRAM_WRITE开始重组摄像头采集的图像数据,以及产生对应的写地址。此时,该模块会在CPUSSRAM的读请求以及SSRAM_WRITE模块的写请求之间做出仲裁:在CPU读请求有效期间,SSRAM_WRITE模块读取SSRAM中的数据,并发送给AVALON总线;当CPU的读请求无效时,SSRAM_WRITE模块将图像数据写入SSRAM,此时该模块将忽略CPU的任何写请求。由于SSRAM的控制时钟(CLK_SSRAM)与摄像头采集数据的工作时钟(CMOS_PIXCLK)不一致,因此,在该模块中添加了两个DCFIFO分别作为实时图像数据及其对应地址的缓冲空间,以此实现不同时钟域的同步。

 

⑤ NIOS II CPU

作为整个系统的调度中心。在实时图像的采集和显示部分中,负责产生图像采集信号,以及对SSRAM的读请求,以将图像数据送至LTM显示。

 

5.2.3显示及触摸屏

 

显示屏及触摸屏采用友晶公司提供的TRDB-LTM 4.3英寸数字LCD触碰面板,长宽比为15:9。支持24-bit并行RGB接口;内置对比度、亮度、伽马调制模块;通过模数转换器(AD7843)将触碰点的X/Y坐标转换成对应的数字信息。

 

 

5.4    LTM触摸屏结构图

 

LTM包含三个主要模块:一个串行接口用于配置LCD显示屏幕的显示模式等参数、LCD显示所需的RGB数据和行场有效信号灯、SPI接口读取AD采样的触摸点XY坐标值。

① LTM显示

要让LTM显示正确的图像需要做以下两个部分内容:

通过串行接口正确配置LCD显示参数

LTM内部有很多控制显示屏工作的寄存器,这些寄存器通过类似SPI协议的串行接口进行访问和设置图5.5是该串行接口的时序图。

 

 

5.5   串行接口时序图

 

在众多寄存器中,有几个寄存器是我们配置的重点:

l        R02寄存器 通过配置该寄存器可以改变显示屏的分辨率。

l        R04寄存器 通过该寄存器配置泵激频率(Pump Frequency)以及显示方式(是否水平翻转或垂直翻转)

l        R11~R21寄存器组 配置这些寄存器实现对LCD显示信号时序的细微调节。

5.6是我们设计的LTM显示配置模块,它通过调用SPI时序模块实现底层时序通信,并采用查找表形式对各个属性安顺序进行配置。

 

5.6   显示配置模块

 

输出正确的显示时序

 

 

5.7    LCD显示时序

 

 

5.8    LCD行信号时序参数

 

5.7和图5.8显示了LCD显示屏的显示时序和参数。我们使用Altera大学计划IP中的Pixel BufferVGA Controller来实现数据的提取和显示。

Pixel Buffer挂接于AVALON总线上,既有主端口,同时也具有从端口。通过Avalon-ST从显示缓存(SSRAM存储器)中提取图像数据,送至VGA Controller模块。由于每个像素点的数据是按照16-bitRGB565形式存储的,Pixel Buffer必须将16-bit的数据转换成24-bit的数据,以满足VGA Controller的需要,其中RGB分量各为8-bit。在默认情况下,Pixel BufferLTM的分辨率设置为400×240。在本系统中,摄像头采集的图像信息分辨率为400×240,而VGA Controller设置的LTM分辨率为800×480,因此,Pixel Buffer400×240的图像分辨率转换成了800×480的分辨率。图5.9显示了Pixel BufferSOPC Builder中的配置方式。

 

5.9   Pixel Buffer参数配置界面

 

VGA ControllerLTM产生时序信号(包括行、列同步信号),该模块将LTM的默认显示分辨率设置为800×480。为了产生正确的时序,VGA Controller需要50MHz的时钟,是LTM所需时钟的两倍。图5.10是整个显示流程示意图。

 

 

5.10   显示流程示意图

 

触摸屏数据采集

触摸屏数据采集直接通过SOPC Builder构建一个SPI模块与LTM的触摸信号相接,再建立一个GPIO口接受来自LTM的触摸中断信号。通过编写Linux驱动实现触摸屏的采集。图5.11显示触摸屏SPI模块的配置界面。

 

 

 

5.11    触摸屏SPI模块的配置

 

5.3 软件系统设计

 

5.3.1 Nios-Linux的配置与修改

 

 

5.12    linux内核与应用程序配置示意图

 

我们使用Nios-Linux内核开发包作为系统开发平台。使用Ubuntu操作系统作为开发主机。通过nios2系列命令工具下载硬件、调试内核。

为支持显示输出,我们开启Framebuffer驱动支持;为支持触摸屏输入,我们开启Event Interface支持;为支持大容量数据存储,我们开启SD/MMCUSB Host驱动。为了减少内核体积,我们关闭了大量额外的驱动选项,在应用程序配置中去除了不必要的库函数和应用程序。图5.12展示了我们专用Linux内核与应用程序的配置示意图。

 

5.3.2驱动的编写

Framebuffer是出现在Linux 2.2.xx及以后版本内核当中的一种驱动程序接口,这种接口将显示设备抽象为帧缓冲区设备。它允许上层应用程序在图形模式下直接对显示缓冲区进行读写和I/O控制等操作。通过专门的设备节点可对该设备进行访问,如/dev/fb*。用户可以将它看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以进行读写操作,而读写操作可以反映到LCD。图5.13展示了Framebuffer驱动作为各种图形库底层的重要地位。

 

5.13    FrameBuffer驱动在Linux系统中的位置

 

FrameBuffer支持多种颜色显示方式:单色、伪彩色、真彩色、直接彩色、灰度等。

 

 

 

5.14   各种颜色模式显示

 

FrameBuffer驱动中有一些重要的数据结构:

l        struct fb_info {

struct fb_var_screeninfo var;

struct fb_fix_screeninfo fix;

struct fb_monspecs monspecs;

struct fb_cmap cmap;

struct fb_ops *fbops;

……

}

fb_info结构是Linux为帧缓冲设备定义的驱动层接口,用于用户在内核空间的调用。它不仅包含了底层函数,而且还有记录设备状态的数据。每个帧缓冲设备都有一个fb_info结构相对应。主要数据项包括:

struct fb_var_screeninfo var  描述当前的可变参数

struct fb_fix_screeninfo fix  描述当前的固定参数

struct fb_monspecs monspecs  描述当前显示器的特有固定信息

struct fb_cmap cmap  描述当前颜色映射表

struct fb_ops *fbops  指向驱动设备工作所需的函数集

fb_ops用户应用可以使用ioctl()系统调用来操作设备

l        struct fb_fix_screeninfo {

unsigned long smem_start

__u32 smem_len

__u32 type

__u32 visual

……

}

该结构用来描述设备无关,不可变更的信息。用户可以使用FBIOGET_FSCREENINFO命令来获得这些信息。结构包含主要的项

unsigned long smem_start  描述缓冲区起始地址(物理地址)

__u32 smem_len  描述缓冲区长度

__u32 type  描述fb类型,比如TFTSTN类型

__u32 visual  描述显示颜色是真彩色,伪彩色还是单色

Linux内核中,已经帮我们实现了FrameBuffer的公共调用部分。通过该部分函数可实现自定义设备的注册和卸载,通过该部分与内核设备管理模型打交道。图5.15展示了Framebuffer驱动开发示意图。

 

 

 

5.15   FrameBuffer开发整体示意图

 

FB驱动的模块加载函数中,主要完成以下工作:

l        申请fb_info结构体内存空间,初始化fb_info结构体中规定和可变屏幕参数。

l        初始化pixel buffer寄存器;使其工作在指定模式;

由于硬件指定的显存缓冲区SSRAM在内核配置时就没有设置为内存区域,因此不需要额外做内存申请操作,直接注册FB设备

FB驱动中最重要的函数要属fb_mmap,应用程序调用它在自己的进程空间映射显存区域,如果该函数出错,图形库将无法工作。在内核包中提供的类似驱动与当前内核不匹配,无法正常工作,使FB正常工作的关键是设置正确的内存映射标志:

vma->vm_flags |= VM_IO | VM_RESERVED;

vma->vm_page_prot = __pgprot(_PAGE_PRESENT|_PAGE_READ|_PAGE_WRITE);

设置正确的映射标志后再调用remap_pfn_range对申请区域进行映射操作即可。

 

5.3.3 FTK图形库

FTKfunny tool kit的简称, 它是一个专门为嵌入式系统开发的图形库,具有以下特性:

 

①基本特性:

l        轻量级,代码量小

l        界面美观

l        代码质量高,设计格式化,代码风格良好

l        稳定性好

l        完备的图形库功能:包括窗口、对话框、手写板、按钮、菜单……

l        LPGL证书许可下发布

 

②高级特征:

l        支持窗口动画功能

l        增加Alpha通道以实现透明化窗口

l        增加手势识别功能

l        使用XML UI语言来描述界面

l        使用脚本语言来胶合界面与内部逻辑

l        支持手写输入法

l        支持屏幕旋转

l        支持各种主题切换

下面是FTK图形库的分层结构图:

 

 

5.16    FTK GUI分层结构图

 

这里从下至上简要介绍各层用途:

最下层是平台相关适配层。包括两个部分:

l        操作系统适配层:封装平台相关的函数,为上层提供统一的接口,如mmappipe等。

l        Backend:对输入/显示设备的抽象。如mousekeyboard之类的输入设备和framebuffer之类的显示设备。

第二层是上层提供统一的接口,隔离具体的实现细节,提高系统的可移植性和灵活性。如图片解码器和字体引擎等都可根据实际情况配置。

第三层是窗口、窗口管理器和主循环等基础设施。

l        顶层窗口包括应用程序窗口,菜单条,状态栏和对话框几种,是放置各种控件的容器。

l        窗口管理器负责控制各个窗口的位置大小和事件的分发。

l        主循环负责监听来自各个事件源的事件,如输入设备事件,定时器和idle等,然后调用相应的分发函数处理事件。

第四层是控件的实现,如按钮、文本、进度条和列表框等。大部分控件都是可裁减的,开发者可以根据实际需求去除不必要的组件。

第五层是XUL,包括XML界面描述和脚本绑定。目前实现了lua的绑定。

最上层是基于FTK的应用环境和平台。还在完善中。

 

FTK本身源码级支持Linux系统,因此可以将该图形库分别移植到PC机上的LinuxNios-Linux中,在PC机上调试通过的代码只需要修改配置文件就可以在Nios-Linux上运行正常。但是由于nios处理器的自身限制以及系统资源的约束,需要对FTK代码做修改和裁剪。

 

PC机上移植FTK

PC机上装有Ubuntu Linux操作系统。在PC机上移植FTK步骤如下:

l        下载FTK源码包,在制定位置解压;

l        使用解压包根目录下的autogen.sh脚本重新生成Makefile.inconfigure脚本为下一步调用该脚本做准备;

l        Configure脚本用来检测系统是否满足软件编译所需的所有要求,并可通过参数设置编译的不同行为。如with-backend参数用来设置软件编译设备选项,enable-tslib使能触摸屏设备作为输入,with-fontengine设置软件使用的字体引擎等。结合系统特点调用configure

l        使用makemake install进行编译和安装。

经过以上配置,就可以在PC机上开发FTK应用程序、图5.17展示了我们在Ubuntu下开发的应用程序界面。

 

5.17   Ftk应用程序界面

 

Nios-Linux下移植FTK

Nios-Linux移植FTK,除了配置编译环境和参数外,还需要做如下修改:

l        修改图形库bmp解码代码以适应NiosII处理方式;

l        裁剪底层支持设备,只留触摸屏和PS2鼠标;

l        修改触摸提取代码消除噪声;

l        添加自定义Widget实现特殊功能。

 

5.3.4 应用程序的编写

5.18展示了应用程序的流程图,通过按键进行界面操作引导。

 

 

 

5.18   应用程序流程图

 

在应用程序中,使用了三个自定义的控件:图片浏览控件、带画笔的绘图控件、影像效果显示控件。开发控件的流程为:

l        根据将要实现的控件行为选定继承的控件类型;

l        编写控件行为函数;

l        源代码继承原控件,并添加自行编写的行为函数;

l        添加到工程中并在主窗体中调用。

 

5.3.5 描唇填色算法的实现

 

在唇彩试妆的功能中,需要用户描绘唇线,通过对用户描绘曲线所包围的封闭区域进行不同透明度颜色的上色可实现不同的试妆效果。下面讲述一下如何取得封闭的区域。

在唇彩试妆步骤二中,创建嘴唇模板图片的同时创建了一个同样大小的字节数组mask[width][height]。初始化时mask的值均为0x0,表示对应坐标点即不是边界区域点,也不是区域内部的点。

在触摸笔进行描唇的过程中,通过自定义控件widget获取当前坐标点及绘笔大小,对mask相同坐标区域赋值为0xFF。同时记录绘制过程中所取得的最小坐标值Pmin.xPmin.y和最大坐标值Pmax.xPmax.y

触摸笔勾勒唇线完毕后,开始提取曲线表示的封闭区域。根据嘴唇形状的特点,我们可知由PmaxPmin所组成的矩形的中点在封闭区域中。因此我们选定该点作为生长点。

基于生长点,先纵向向上生长,同时对应mask中的值填充为0x7F,生长遇到mask相应位置为0xFF时停止,转而以生长点纵向下一个点开始向下生长并标记mask。遇到mask相应位置时停止。然后将生长点水平左移一个单位点,进行同样的操作。

进过这样生长后,会来到封闭区域左边最初生长点所在行的边界处。然而此时并不一定到封闭区域的左边边界,如图5.19所示。因此需要做下一步的处理。

 

5.19    生长示意图

 

取得左边边界处纵向生长的边界点纵坐标,求其平均,以该平均值为新的生长点纵坐标,以左边界点的左边一点横坐标为生长点横坐标,若当前值已为边界,则跳回最初生长点以456步骤的方法生长直到结束。若当前值不为边界,则继续456步直到条件不满足。

 

(Revision: 2 / 2010-08-26 22:53:31)

6. 设计特点 (Preliminary Paper)

6 设计特点

 

6.1 广泛应用性

 

本系统设计思路新颖,价格低廉,构造简单,体积灵活,简单易用,完全适用于各种商场化妆品柜台。本系统免去了反复试用样品的麻烦,使消费者通过一种便捷的方式选到满意的化妆品。由于本系统具有较为真实的上妆效果,并且省时节约,从而填补了市场空缺,具有较广泛的应用前景。

 

6.2 轻量级GUI图形库

 

移植了轻量级GUI图形库FTK,该图形库不仅使系统的图形界面具有更好的观感,而且该图形库的高质量代码使其可以以较小的代价移植到Linuxwindows等系统中。

 

6.3 人性化设计

 

人性化的人机交互界面使得本设计更加贴近大众,开机即可按照界面引导进行试用,容易上手使用。

 

6.4  SOPC技术    

 

系统设计中把摄像头、LTM显示、PS2等功能模块都定制成SOPC系统中的用户自定义模块,添加到SOPC中,使系统具有高可剪裁性。

 

6.5 基于NIOS IILinux操作系统

 

采用带MMUNIOS II处理器,使用NIOS Community Wiki上的Linux操作系统(nios2-linux-20090929.tar),充分利用已有驱动加快设计速度;同时自行编写了LTMFramebuffer驱动和触摸屏驱动等;采用多线程编程,提高系统的使用效率,简化系统软件开发难度。

 

6.6 低成本

 

系统基于低成本高性价比的DEII-70开发板进行设计,充分利用了CycloneII芯片内丰富的存储器和开发板上的SRAMSDRAMFlash以及CMOS摄像头等资源,大大压缩了开发周期,降低了系统成本、复杂性和功耗。

(Revision: 3 / 2010-08-26 22:54:07)

7. 总结 (Final Project Paper)

7 总结

  

在近三个月的努力中,我们实现了最初设想的系统功能,尽管还是有一些地方可以得到更好的完善。在竞赛过程中,我们得到了很多来自Altera 公司的技术支持,一方面用到了Altera公司支持的大学IP核计划,另一方面也用到了Altera 公司网站上的相关资料。我们也真正体会到了SOPC的优势所在,它可以使我们更加快捷地构建系统,开发软硬件;利用现有的IP核以及Altera公司提供的大学计划IP核,使我们在系统开发时事半功倍。同时我们也看到了NIOS 软核的优越性,在本系统中,我们使用了NIOS Community Wiki上的Linux操作系统(nios2-linux-20090929.tar),可以根据硬件系统的特点对内核进行裁剪,NIOS II软核系统可以根据我们的要求定制处理器,这样就大大减少了开发的难度,便于算法的软件实现。

引入Linux操作系统,能有效提高CPU的利用率,简化复杂系统的开发难度。

在本次比赛中,我们不仅对NIOS II SOPC有了更进一步的理解,同时学习了FTK GUILINUX操作系统的相关知识。在这段时间里,虽然遇到了很多困难,但是在师兄及论坛网友的无私帮助下,我们顺利完成了作品。

最后感谢Altera公司为我们参赛小组提供了这样一次机会,锻炼了我们的动手能力,让我们从中学到了很多新的知识。

 

(Revision: 4 / 2010-08-26 22:54:52)