开源中国-最新资讯 ( ) • 2024-06-26 10:59

2024年6月21日下午,华为终端BG软件部总裁龚体先生在华为开发者大会主题演讲《鸿蒙原生应用,全新出发!》中向全球开发者介绍了华为自研仓颉编程语言,并发布了HarmonyOS NEXT仓颉语言开发者预览版。这是华为首次公开发布仓颉编程语言

据介绍,复旦大学工研院认知与智能技术实验室(CITLab)领衔的研发团队与华为仓颉编程语言团队建立了的长期合作关系,早在仓颉语言内测启动以来,就密切关注其技术动态和应用前景。

复旦大学认知与智能技术实验室(简称CITLab),近年来一直在机器直觉、人机融合智能等新一代人工智能理论、脑机接口与脑启发人工智能、多模态感知与人机交互、计算机视觉与行为识别、物理仿真与数字孪生,以及智能机器人、智能网联汽车、智慧医疗等领域开展交叉创新研究,相关学术成果发表于Nature主刊,中国科学,NeurIPS,CVPR,ICCV,AAAI,ACM MM,ICRA以及IROS等国内外顶级期刊与学术会议,并积极开展产学研合作创新,助力解决产业发展中的技术难点、痛点问题。

经过调研,团队发现仓颉语言生态还缺少图像处理算法库的支持。结合团队在图像处理方向积累的丰富研发经验,通过对两个广泛使用的开源代码库zxing的条码识别算法和glide的图像加载与缓存机制进行深入分析,完成了适用于仓颉语言的高性能图像处理算法的研究、开发和优化,并成功实现了QRcode4cj(zxing for cj)和droplet(glide for cj)两个高频图像处理软件库


1.项目背景简介

HarmonyOS NEXT是华为公司自研的操作系统,是鸿蒙系列中首次抛弃Linux内核及安卓开放源代码项目(AOSP)等代码的版本,不再兼容安卓应用,标志着华为在操作系统领域的独立发展。

该系统采用了全栈自研的方式,从编程语言到编译器都是华为自主研发的,包括arkTS和仓颉编程语言、“盘古”AI大模型、“MindSpore”AI框架以及“DevEco Studio”等集成开发环境。

其中,仓颉编程语言是一种面向全场景应用开发的通用编程语言,语法简明高效,并支持函数式、命令式和面向对象等多范式编程,有助于提高开发效率。而一种新的操作系统包括一种新的编程语言的出现,首先需要解决的就是生态系统建设。

本项目的目标就是通过高性能图像处理算法库的示范研发,助力推动仓颉编程语言的生态建设和持续发展。

2.高性能图像处理算法库的实现

2.1 droplet图像处理库

droplet是一个强大的图片加载和缓存库,使用仓颉语言开发,服务于HarmonyOS NEXT应用开发。它简化了从网络、资源文件、应用缓存中加载和显示图片的过程。droplet支持多种图片格式,具有高效的内存管理和磁盘缓存策略,能够自动处理图片缩放和转换,提供流畅的用户体验。在droplet的实现过程中,团队采用了三级缓存设计、高效的异步图像加载流程两种优化设计思路。

其中,三级缓存设计包括活动资源缓存、内存缓存和磁盘缓存。活动资源缓存用于保存当前页面上正在显示的图片,图片首次加载完毕时会保存到活动资源缓存中。由于活动资源缓存中的数据一般会比内存缓存中少,因此具有更快的查询速度。而内存缓存负责保存整个程序运行过程中加载过的所有图像,它使用LRU算法,当缓存超出容量,首先回收不经常使用的图像。此外,drople提供了磁盘缓存功能,即使应用被关闭或系统资源被回收,图片仍然可以被缓存并快速重新加载。

此外,项目设计了高效的异步图像加载流程。drople的图像加载部分使用了策略模式,可以根据图像的格式选择加载器,并支持异步加载、图像缩放、旋转等操作。这使得在不同大小的屏幕上加载和显示图片变得简单而高效。

进一步,droplet的图像解码部分依托于仓颉UI框架强大的图像解码功能,实现了对gif、jpeg、png、svg、webp、raw等常用图像类型文件的解码支持。

2.2 QRcode4cj图像处理库

QRcode4cj是一维/二维码图像处理库,支持多种1D/2D码格式,如QR码、EAN-13等。它用仓颉语言实现,并提供了跨平台的API,用于生成和解码条码,可广泛应用于移动支付、信息分享等场景。其优势在于多格式支持、高性能和易集成。QRcode4cj的实现为HarmonyOS NEXT开发提供了开箱即用的编解码库。

QRcode4cj提供了针对仓颉优化的条码识别库,能够准确、快速地解码不同类型的条码。其条码识别算法经过优化,可以在复杂环境下有效解析二维码,开发者能轻松地从各种质量的图像中提取条码所包含的信息。同时,QRcode4cj提供了强大的条码生成的能力。可以根据开发者的需要生成各种类型的条码图像。此外,QRcode4cj实现了高效且易用的图像处理算法,结合仓颉语言的特性进行了深度优化,极大提高了代码的执行效率,经过测试,相同条件下编解码时间均优于Java版本。

3.深度算法优化

图像处理算法的复杂性较高,为了获得良好的用户体验,团队对相关算法进行了深度优化,以便显著提升计算效率,减少资源消耗,加快处理速度,同时提高系统稳定性和性能,满足不断增长的应用需求。

为了分析代码的执行效率,团队使用了仓颉语言提供的可视化性能分析工具(cjprof),在深入分析了性能数据并结合仓颉语言的特性之后,从代码、算法和并行化三个层面对两个图像处理库的核心算法进行了优化:

  1. 代码层面:首先通过精简和提炼,实现程序的轻量化设计,去除冗余代码,提高代码的执行效率。其次对代码的逻辑进行优化,通过重新设计算法流程,减少不必要的计算过程和方法调用,进一步提升系统性能。
  2. 算法层面:优先采用在行业中经过高度覆盖验证的算法,以确保主干算法的稳定性和有效性。同时设计了灵活的接口形式,开发者可以通过多种方式实现所需的功能。
  3. 并行化层面:以仓颉语言提供的抢占式的线程模型(仓颉原生协程)为基础,将部分程序的计算过程并行化,并在仓颉原生协程的基础上封装了协程的调度策略,确保并行计算过程的有序性和高效性。

此外,针对软件库中高频使用的算法进行了更细致的优化。新算法将原有识别步骤进行精细拆分与重新整合,引入了快速扫描和初步分析机制。这一优化策略在保持高准确性的同时,显著提升了识别效率,为用户提供了更加流畅、快捷的识别体验。

4.小结

经过对仓颉语言的深入研究和实践,团队发现仓颉语言的优势在于多范式编程、原生协程、功能丰富的内置库和对AI开发的支持,并且有一系列较为完备的配套开发工具,能够简化从代码的编写到程序性能分析、测试和优化,以及最终的应用部署的整套开发流程,大幅提高应用软件的开发效率。

相信在仓颉语言发布之后,将会吸引更多的软件开发者加入到仓颉语言的开发中来,助力鸿蒙NEXT应用开发与生态环境建设,彻底打破国外编程语言的垄断。