当前位置:首页 > 电源 > 数字电源
[导读]结合SoPC技术裁剪灵活的特点和嵌入式Linux操作系统高性能多任务的特性,设计了基于Linux和轻量级图形库FTK的虚拟试妆系统。以带MMU的Nios II处理器和Linux操作系统为基础,采用自行设计的模块实现影像采集和存储,通过在触摸屏上移植轻量级图形库FTK实现交互界面开发。最终实现了具有商品浏览、模拟化妆、真人上妆等功能的虚拟试妆系统。

随着社会的进步,人们对自身形象愈加重视,化妆成为女性一门必修课。如何选择合适的化妆品对于不少女性来说是一项难题。近几年针对该问题提出了多种虚拟试妆解决方案。包括通过浏览器进行本地与远程服务器交互方案及使用Visual C++开发上位机软件[1]等。
    以Altera公司的SoPC技术和Linux操作系统为基础,设计了一款嵌入式虚拟试妆系统。该系统在SD卡中存储信息,通过摄像头采集用户面部图像,用户可通过触摸屏浏览、选择商品对影像进行上妆,并查看试妆效果,最终达到选购化妆品的目的。系统具有体积小巧、方便易用等特点,适合于各种商场的化妆品柜台。
1 系统总体结构设计
    系统以DE2-70为核心板,外接PS2键盘录入信息,通过扩展口分别接入LTM触摸屏和D5M 500万像素摄像头。为使用Linux操作系统,构建了基于带MMU的Nios II处理器的SoPC。通过SDRAM运行内核和RAM文件系统,使用SSRAM作为显示缓存,将硬件编程代码烧入EPCS,而将压缩的内核、文件系统与引导代码一起烧入Flash。系统采用Altera大学计划IP中的PS2 Controller和Video IPs分别管理PS2接口和触摸屏的显示部分,自行编写硬件模块实现触摸屏的配置、摄像头采集和SSRAM多路复用。此外,系统还使用SPI模式管理SD/MMC卡以及第三方IP管理网络物理芯片。系统结构框图如图1所示。
2 系统硬件设计
2.1 运行Linux的最小系统搭建

    Linux操作系统对SoPC系统的构建有特殊要求,包括带MMU处理器设置、全功能定时器启用、通信终端设定等。表1总结了基于Linux系统所需要添加的SoPC组件以及关键设置[2]。
2.2 影像采集和存储方案设计
    图2所示为本系统使用的影像采集和存储方案。在SoPC系统外,通过Cam_CFG_CAP模块配置和采集摄像头数据,经由SSRAM_WRITE模块合成指定格式数据并生成SSRAM写时序送入SSRAM_2PORT进行仲裁;SSRAM_2PORT既接收SSRAM_WRITE的数据写入SSRAM的指定区域,又允许SSRAM Controller访问SSRAM获取相应数据。

 

 

    (1)SSRAM_WRITE
    该模块分别提取Cam_CFG_CAP传入RGB分量的高5、6、5 bit数据,拼接成16 bit数据,读入两个像素合成32 bit,同时生成对应的21 bit SSRAM地址,将其传递给SSRAM_2PORT。
    (2)SSRAM_2PORT
    该模块对来自SoPC系统的SSRAM控制器和SSRAM_WRITE的读写请求做出仲裁。在CPU读请求有效期间,SSRAM_2PORT模块读取SSRAM中的数据发送给Avalon总线;超出读请求有效期则接收SSRAM_WRITE模块图像数据写入SSRAM。在该模块中添加两个DCFIFO分别作为实时图像数据及其对应地址的缓冲空间,实现不同时钟域的数据同步。
3 系统软件设计
3.1 开发包修改及内核配置

    系统采用NiosWiki社区发布的nios2-linux-20090929.tar内核开发包作为软件开发基础。SoPC系统构建好后,通过“sopc-create-header-files --single custom_fpga.h”生成自定义硬件对应的C语言头文件,将该文件拷贝到“nios-linux/linux-2.6/arch/nios/include/asm/”路径中。开发包通过custom_fpga.h和nios.h两个文件中的宏定义管理SoPC组件与Linux内核驱动代码对设备的映射,同时通过config.c文件内置了大量设备的驱动支持,由内核配置生成的config.h文件和nios.h以及custom_fpga.h共同控制。图3所示为这三个文件之间的关系。

[!--empirenews.page--]

    默认的内核开发包并不能直接使用,需针对本系统进行移植修改,主要内容如下:
    (1)custom_fpga.h中的串口宏定义和config.c中使用的宏定义不同,将config.c中关于串口0的宏定义UART0_*改为UART_0_*。
    (2)/dev/mmcblk* 系列设备的主设备号与注册时不一致,导致挂载操作失败,解决办法是将"nios2-linuxuClinux-dist/vendor/Altera/nios2/device-table.txt"中关于mmcblk*的主设备号修改为179。
    图4所示为本系统进行的内核配置。

    在所有配置中,需要特别注意以下几点:
    (1)内核配置菜单中,需将默认的“Nios II Configuration--->Nios II FPGA Configuration(MMU DEFAULT)”修改为“Nios II FPGA Configuration(CUSTOM_FPGA)”。
    (2)为防止内核解压缩内容覆盖内核压缩文件,设置“Nios II Configuration--->Link address offset for booting”为0x00F00000。
3.2 应用程序开发
3.2.1 图形库移植

    FTK是Funny Tool Kit的缩写,是一个专门为嵌入式系统开发的图形库,其核心代码只有几百KB,在传统控件基础上可开发自定义控件,具有主题设置功能[3]。FTK支持Linux系统,因此在发行版Linux操作系统上安装FTK函数库只需下载相应代码,编译安装即可。而Nios II平台移植FTK需解决以下几个问题:
    (1)Nios II平台下png和jpeg编解码函数库无法使用,同时FTK的bmp解码函数采用定义整形指针的方式,如“(*(unsigned int*)0x01000000)”对内存进行访问会触发异常中断。解决方法为移除FTK对png和jpeg格式的支持并修改ftk_image_bmp_decoder.c代码,将4字节指针访问修改为4个单字节指针访问。
    (2)Nios II平台通过触摸屏设备进行人机交互。解决办法:内核开发包中开启tslib函数库而FTK源代码进行configure配置时添加“--enable-tslib”参数。
3.2.2 交互界面设计
    虚拟试妆系统包含唇彩试妆和自由试妆两大功能。在唇彩试妆功能中,用户首先要选择进行试妆所需的唇部影像,然后用户需手动确定唇部区域,接着进入商品挑选环节。自由试妆同样也要经历以上步骤。图5所示为试妆软件功能界面划分的思路及程序流程图。

    FTK界面开发包含以下几部分工作:
    (1)调用ftk_init进行初始化。调用ftk_app_window_create函数创建窗口,设置控件的大小及位置;
    (2)使用类似ftk_XXX_set_clicked_listener函数关联控件和响应函数。试妆系统每个功能下均有多个界面通过按钮进入,因此在响应函数中需通过调用ftk_app_window_create或ftk_dialog_create创建新的界面;
    (3)设计自定义控件,包括用户浏览图片控件、描唇控件等。
    FTK应用程序要在系统硬件平台上运行,RAM文件系统中至少需要具备四部分内容:FTK动态函数库、tslib函数库、FTK配置文件(字体、主题、输入法)以及应用程序。动态函数库在编译后会出现在RAM文件系统的lib目录中,而FTK配置文件需通过修改rc脚本使Linux内核初始化完毕后从SD卡中拷贝到内存中。图6总结了FTK应用程序在Nios II平台上运行必备条件及设置方法。


    详细介绍了本系统的硬件架构和Linux开发方法,侧重阐述了Linux系统运行的最小SoPC系统搭建,利用Altera大学计划IP构建触摸屏显示子系统、摄像头影像采集和存储模块的实现以及Linux内核配置和应用程序开发的重要细节。采用移植的FTK图形库完成虚拟试妆软件编写。实践表明,该系统运行稳定流畅,效果良好。
参考文献
[1] 祝秀萍,刘文峰,张海峰.人脸虚拟化妆系统的研究[J].计算机与信息技术,2008(8):38-42.
[2] Kyledunn.Creating a Nios II design with an MMU[EB/OL].http://www.alterawiki.com/wiki/Creating_a_Nios_II_Design_with_an_MMU,2011.
[3] 李先静.FTK开发者邮件列表[EB/OL].https://groups.google.com/group/funnytoolkit,2011.

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭