• [技术干货] 高性能 Web 服务器与反向代理实战
    Nginx(发音为 "engine-x")已成为高并发、高性能 Web 服务的代名词。作为全球最受欢迎的 Web 服务器之一,Nginx 不仅被 Google、Facebook、Netflix、淘宝、京东等大型互联网公司广泛采用,更是微服务、负载均衡、API 网关等现代架构的核心组件。 一、什么是 Nginx?Nginx 是一个开源的 高性能 HTTP 服务器和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 邮件代理服务器。它由俄罗斯程序员 Igor Sysoev 于 2004 年发布,最初为解决 C10K 问题(单机支持 1 万并发连接)而设计。核心特点:特性说明高性能异步非阻塞事件驱动架构,资源消耗低,支持高并发高可靠性进程模型稳定,即使高负载下也不会崩溃热部署支持不停机更新配置、升级版本模块化设计功能通过模块扩展,灵活可定制反向代理与负载均衡支持多种负载均衡算法静态资源服务高效处理 HTML、CSS、JS、图片等静态文件二、Nginx 架构原理:为什么这么快?1. 事件驱动 + 异步非阻塞与传统 Apache 的 多进程/多线程模型(每个连接占用一个进程/线程)不同,Nginx 采用 事件驱动的异步非阻塞 I/O 模型。Master 进程:管理进程,不处理请求。Worker 进程:每个 Worker 采用单线程 + 事件循环(Event Loop)处理成千上万个并发连接。I/O 多路复用:使用 epoll(Linux)、kqueue(BSD)等机制,一个进程可监听多个 socket。✅ 优势:内存占用少,上下文切换开销小,轻松应对数万并发连接。三、Nginx 的核心应用场景1. 静态 Web 服务器Nginx 是服务静态资源的绝佳选择,性能远超应用服务器(如 Tomcat)。server { listen 80; server_name www.example.com; location / { root /var/www/html; # 静态文件目录 index index.html; } # 缓存静态资源 location ~* \.(jpg|jpeg|png|css|js)$ { expires 1y; add_header Cache-Control "public, immutable"; }}2. 反向代理(Reverse Proxy)Nginx 作为“门面”,接收客户端请求,转发给后端应用服务器(如 Java、Python、Node.js),并返回响应。server { listen 80; server_name api.example.com; location / { proxy_pass http://127.0.0.1:8080; # 转发到本地 8080 端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}✅ 优势:隐藏后端服务器真实 IP统一入口,便于管理提升安全性3. 负载均衡(Load Balancing)Nginx 可将请求分发到多个后端服务器,实现横向扩展与高可用。配置示例:upstream backend { # 负载均衡算法 least_conn; # 最少连接 # round-robin; # 轮询(默认) # ip_hash; # IP 哈希(会话保持) # hash $request_uri; # 一致性哈希 server 192.168.1.10:8080 weight=3; # 权重 3 server 192.168.1.11:8080; server 192.168.1.12:8080 backup; # 备用服务器}server { listen 80; location / { proxy_pass http://backend; }}4. SSL/TLS 加密(HTTPS)Nginx 可作为 SSL 终端,处理 HTTPS 请求并解密后转发给后端 HTTP 服务。server { listen 443 ssl http2; server_name www.example.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/private.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512; location / { proxy_pass http://backend; }}✅ 推荐:使用 Let's Encrypt 免费证书 + Certbot 自动续期。5. 缓存加速Nginx 支持反向代理缓存,减少后端压力,提升响应速度。# 定义缓存区proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;server { location / { proxy_cache my_cache; proxy_pass http://backend; proxy_cache_valid 200 302 10m; # 缓存 10 分钟 add_header X-Cache-Status $upstream_cache_status; }}缓存命中时,X-Cache-Status 返回 HIT,否则为 MISS。6. URL 重写与重定向# 301 永久重定向rewrite ^/old-page$ /new-page permanent;# 条件重写if ($http_user_agent ~* "bot|spider") { rewrite ^/.*$ /robots.txt break;}# 伪静态rewrite ^/article/(\d+)\.html$ /article.php?id=$1 last;四、常用配置指令详解指令作用listen监听端口和 IPserver_name匹配域名location定义 URL 路由规则root / alias文件路径映射proxy_pass反向代理目标upstream定义后端服务器组try_files尝试多个文件路径(常用于 SPA 路由)gzip启用 Gzip 压缩SPA 应用路由支持(如 Vue、React)location / { root /var/www/app; try_files $uri $uri/ /index.html;}确保前端路由刷新不 404。五、性能优化建议1. Worker 进程优化worker_processes auto; # 通常设置为 CPU 核心数worker_connections 1024; # 每个 Worker 最大连接数worker_rlimit_nofile 65535; # 提升文件描述符限制2. 开启 Gzip 压缩gzip on;gzip_types text/plain text/css application/json application/javascript text/xml application/xml;3. 启用 HTTP/2listen 443 ssl http2;减少延迟,提升加载速度。4. 静态资源缓存location ~* \.(css|js|jpg|png|gif)$ { expires 1y; add_header Cache-Control "public, immutable";}六、安全加固1. 隐藏 Nginx 版本号server_tokens off;2. 防止点击劫持add_header X-Frame-Options SAMEORIGIN;3. 防止 XSS 攻击add_header X-Content-Type-Options nosniff;add_header Content-Security-Policy "default-src 'self'";4. 限制请求频率limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;location /api/ { limit_req zone=api burst=20 nodelay;} 
  • [技术干货] 【ELB 运维体验优化升级】独享型负载均衡新增回收站、支持闲置实例快速查看、访问日志支持自定义header信息并支持在ELB访问日志界面搜索/导出/分析/统计日志数据、新增丢包监控和TLS协商错误监控指标
    一、新增功能1、独享型负载均衡新增回收站2、闲置实例快速查看 二、体验优化1、访问日志支持自定义header信息并支持在ELB访问日志界面搜索/导出/分析/统计日志数据、新增丢包监控和TLS协商错误监控指标2、新增丢包监控和TLS协商错误监控指标弹性负载均衡ELB产品最新动态,点击这里一键快速直达!访问弹性负载均衡ELB控制台,即刻开启全新体验:)
  • [技术干货] 【ELB 配置体验优化升级】新增监听器启停管理、负载均衡器实例复制及EIP标签同步等功能,支持负载均衡实例/监听器/后端服务器组/证书批量删除操作,支持ECS删除时,联动删除ELB后端服务器记录
    一、新增功能1、监听器一键灵活启停2、负载均衡实例支持一键复制3、负载均衡标签支持同步到EIP 二、体验优化1、支持负载均衡实例/监听器/后端服务器组/证书批量删除2、支持ECS删除时,联动删除ELB后端服务器记录弹性负载均衡ELB产品最新动态,点击这里一键快速直达!访问弹性负载均衡ELB控制台,即刻开启全新体验:)
  • 一张图了解什么是华为云弹性云服务器
    图解弹性云服务器-什么是云服务器
  • [区域复赛赛题问题] 有没有好心人能给点思路啊,初赛分数挺高的,然后复赛思路不对,分数特别低
    有没有人能给一点建议,比如存储方式以及双磁头分工,万分感谢
  • [问题求助] 图中的路由表下一跳ECS-X跟右侧ECS-X01防火墙是同一对象吗?
    图中的路由表下一跳ECS-X跟右侧ECS-X01防火墙是同一对象吗?
  • [课程学习] 云技术精髓活动笔记分享-一个通过认证考试者的一些心得和总结
    在完成华为云《云技术精髓入门级开发者认证》的系列学习内容后,现在已经通过了理论考试和实验考试。结果如下:实验考试分数:整个过程中,我收获颇丰,不仅对云技术有了更深入的理解,还在实践操作和学习方法上有了新的感悟。以下是我此次学习的详细笔记。一、课程内容概述华为云的这门入门级开发者认证课程涵盖了丰富多样的云技术相关知识,从云的基础概念到具体的服务应用,层层递进,为学习者搭建了一个较为完整的云技术知识框架。(一)云基础概念课程首先深入浅出地介绍了云的定义、发展历程以及云服务的主要类型,如基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)。通过生动的案例和图表,让我清晰地理解了不同云服务类型之间的区别与联系,以及它们在实际应用场景中的优势。例如,IaaS 适合企业自行搭建和管理应用程序所需的基础设施,而 SaaS 则更侧重于为用户提供直接可用的软件应用,无需关注底层的硬件和软件环境。(二)华为云核心服务接着,课程详细讲解了华为云的一系列核心服务,包括弹性计算服务(ECS)、弹性块存储(EVS)、虚拟私有云(VPC)等。对于 ECS,我了解到它可以根据用户的需求灵活配置计算资源,如 CPU、内存等,并且能够快速创建和启动实例,为应用程序的部署提供了便捷的计算环境。同时,学习了如何在创建 ECS 实例时进行合理的选型,考虑因素包括业务负载、预算等。EVS 则让我认识到云存储的重要性和便利性。它可以为 ECS 实例提供可靠的存储服务,并且支持多种存储类型,以满足不同应用场景对存储性能和成本的要求。VPC 的学习让我明白了如何在华为云中构建一个虚拟的私有网络,实现网络资源的隔离和定制化配置。通过划分子网、设置路由表等操作,可以有效地控制网络流量,保障网络的安全性和稳定性。(三)云安全与管理云安全是云技术应用中至关重要的一环,课程也着重强调了这方面的内容。学习了华为云提供的各种安全服务,如安全组、云审计(CTS)等。安全组可以通过设置规则来控制进出实例的网络流量,确保只有合法的流量能够访问实例,从而保护实例内的应用程序和数据安全。云审计服务 CTS 则能够记录对华为云的 API 访问等操作信息,这对于安全审计、合规检查以及故障排查等方面都具有重要意义。通过分析 CTS 记录的日志,可以及时发现异常的操作行为,采取相应的措施加以防范。二、实验心得课程配套了丰富的实验内容,让我有机会将所学的理论知识应用到实际操作中,这也是我此次学习过程中最有收获的部分之一。(一)实验环境搭建在进行每个实验之前,首先需要搭建相应的实验环境,这涉及到在华为云平台上创建各种所需的资源,如 ECS 实例、VPC 等。刚开始的时候,我对一些操作步骤还不是很熟悉,比如在配置 ECS 实例的网络参数时,容易出现错误导致实例无法正常联网。但是通过仔细阅读实验指导文档,多次尝试并参考平台提供的帮助信息,我逐渐掌握了正确的操作方法,成功搭建起了稳定的实验环境。(二)实验操作过程在完成环境搭建后,便开始进行具体的实验操作。例如,在进行 ECS 实例的创建和管理实验时,我按照步骤依次完成了实例类型选择、操作系统安装、应用程序部署等操作。在这个过程中,我深刻体会到了华为云平台操作的便捷性和灵活性。通过简单的几步操作,就可以快速创建出满足需求的 ECS 实例,并且可以根据实际情况随时对实例进行配置调整,如增加内存、更换操作系统等。同时,在进行 VPC 相关实验时,我学习到了如何通过划分子网、设置路由表等来实现网络流量的控制。通过实际操作,我更加直观地理解了 VPC 的工作原理和作用,以及如何利用它来保障网络的安全性和稳定性。(三)实验结果与收获经过一系列的实验操作,我成功完成了各个实验项目,并获得了预期的实验结果。通过这些实验,我不仅巩固了所学的理论知识,还提高了自己的实际操作能力。我学会了如何在华为云平台上快速创建和管理各种云资源,如何运用云服务来解决实际问题,以及如何通过云安全服务来保障系统的安全。此外,实验过程中也遇到了一些问题,如网络连接不稳定、应用程序部署失败等。但是通过自己的努力排查和参考平台提供的解决方案,我逐渐克服了这些问题,这也让我在解决实际问题的能力上有了很大的提升。三、学习方法分享在学习这门课程的过程中,我也总结了一些适合自己的学习方法,希望对其他学习者有所帮助。(一)理论与实践相结合云技术是一门实践性很强的学科,单纯的理论学习很难真正掌握其精髓。因此,在学习过程中,我始终坚持理论与实践相结合的原则。每学习一个新的知识点,我都会尽快找到相关的实验或案例来进行实践操作,通过实际应用来加深对理论知识的理解。例如,在学习 ECS 实例的配置时,我不仅认真学习了理论知识,还立即在华为云平台上进行了实例创建和配置的实验,这样可以更加直观地了解各个参数的作用和设置方法。(二)多参考官方文档和资料华为云官方提供了丰富的文档和资料,包括课程教材、实验指导手册、技术白皮书等。这些官方资料是学习的重要资源,它们详细介绍了华为云的各项服务和操作方法,内容准确、权威。在学习过程中,我经常会参考这些官方资料,尤其是在遇到不懂的问题或操作不熟悉的情况时。通过仔细阅读官方资料,可以快速找到问题的答案和正确的操作方法,避免走弯路。官方文档地址如下:官方文档帮助中心_华为云 (huaweicloud.com)四、总结通过参加华为云《云技术精髓入门级开发者认证》的学习,我对云技术有了全面的认识和深入的理解,掌握了华为云的一些核心服务的使用方法,提高了自己的实际操作能力和解决实际问题的能力。同时,我也总结出了一些适合自己的学习方法,这些方法将对我今后继续学习和应用云技术起到重要的作用。在未来,我希望能够继续深入学习云技术,考取更高级别的认证,进一步提升自己在云技术领域的专业水平,为企业的数字化转型和云应用发展贡献自己的一份力量。
  • [分享交流] 诚邀弹性负载均衡ELB用户参加有奖测评活动~~
    活动介绍:为了给用户提供更好的产品体验,华为云现邀请负载均衡管理员有偿参加产品测评活动。测评时长:1.5-2小时测评方式:线上测评,电脑入会报名条件:弹性负载均衡ELB管理人员,从事负载均衡管理工作;负责ELB使用规划,日常运维,购买及使用,熟悉ELB监听配置业务等;访谈日期:2023年10月活动奖励:参与测评后可获得200元京东购物卡报名入口:需要先填写本问卷报名cid:link_0,在问卷结尾留下联系方式本活动最终解释权归华为云UED团队所有。
  • [其他问题] 私网负载均衡收费问题
    墨西哥2的私网负载均衡什么时候开始收费的?
  • [技术干货] 不同域名同IP
    视频点播,直播分别是两个不同的域名,绑定的同一个ip,后端是两台服务器提供视频点播和视频直播服务。华为云什么服务可以实现该功能,并简要说明步骤ELBhttps://support.huaweicloud.com/qs-elb/zh_cn_elb_02_0001.html共享型负载均衡可以配置基于域名和URL的转发策略,将来自不同域名或者不同URL的请求转发到不同的后端服务器组处理。此功能目前仅支持协议类型为HTTP、HTTPS的监听器。步骤:创建弹性云服务器—搭建后端服务—新建负载均衡器—添加监听器—添加转发策略—验证负载均衡服务
  • ELB-证书管理-更换证书怎么把已经有的名字改了
    报名的时候忘记改名字了怎么把证书名字改过来
  • [技术干货] ModelArts模型到端侧的落地 - ModelBox端云协同AI开发套件(RK3568)体验
    ModelArts训练出模型后,是可以部署为云端的在线服务,还有一种很常见的部署,那就是要部署到端侧,贴近场景进行推理应用。 当然这里有一个前提是模型需要转换为适合于端侧部署的模型,目前是手工操作的。 一旦有了适合于端侧部署的模型,ModelBox开发套件就可以大展身手了,从有了模型,到成功部署、将端侧应用跑起来和用起来,整个流程比较行云流水,提高了不少的效率。 以下是体验试用的一个小汇总,体验还在继续进行中.... ------------ 试用一个月,完了要还回去,不知道这个开发套件需要多少钱,反正拿到了开发套件是挺开心的。 拿到之后,就参照[《上手指南》](https://developer.huaweicloud.com/develop/aigallery/article/detail?id=0163b46b-34fa-468d-b243-2ef067170d4a)开始动手了。 把东西拿出来摆放整齐后是这个样子: ![IMG_20220713_193515.jpg](https://bbs-img.huaweicloud.com/blogs/img/20220718/1658152109738849835.jpg) 安装一半后是这个样子: ![IMG_20220713_220129.jpg](https://bbs-img.huaweicloud.com/blogs/img/20220718/1658152264390121767.jpg) 板子上电带系统启动后是这个样子: ![IMG_20220714_075009.jpg](https://bbs-img.huaweicloud.com/blogs/img/20220718/1658152324493435995.jpg) 首先是操作系统的制作,没有系统板子上电后只是一个绿灯常亮。系统启动镜像要写到tf卡里(Micro SD),刚好家里有一个读卡器可以写。镜像读写工具 balenaEtcher 下载很慢,我是个急性子,等不及就放弃了。想在Linux下面解压后再想办法写入,不需要下载什么工具。于是把我一直吃灰的Ubuntu20.04打开,果然有超预期表现:右键就有“用磁盘映像写入器打开”(注意图中20220707的镜像制作的有些问题,无线网卡驱动没有加载上,最后还是用老的镜像) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220718/1658152600941255505.png) 将镜像写入到32G的TF卡中: ![2022-07-13 21-35-34 的屏幕截图.png](https://bbs-img.huaweicloud.com/blogs/img/20220718/1658152674096839019.png) 写完了: ![2022-07-13 21-44-37 的屏幕截图.png](https://bbs-img.huaweicloud.com/blogs/img/20220718/1658152692335423257.png) 系统成功启动后,下一步就是要登陆上开发版。按照指南,有两种方式。 1. 开发板连接显示器和键盘鼠标,安装Ubuntu桌面,直接在开发板上进行开发; 2. 使用远程连接工具(如VS Code中的Remote-SSH)从PC端登录开发板进行开发。 相对于去找网线配置网络,我更愿意去把键盘和鼠标找出来,然后将hdmi连上我的荣耀智慧屏作为显示器。 ![IMG_20220714_080237.jpg](https://bbs-img.huaweicloud.com/blogs/img/20220719/1658186954480926744.jpg) 这不就可以登陆上系统了吗?然后用 nmcli 命令连上无线网。这样板子连上网之后,后面就好办了。 也把桌面 mate 安装上了,大约1300个包,要下载700兆(解压后3.6G)。所以事先把系统源替换到华为云镜像,比较尴尬的是华为云镜像ubuntu arm版本比较老,所以替换为阿里云。 安装好后重启就可以进入桌面了,这个55寸荣耀智慧屏是最开始推出时就买来的,很优惠,不到两千块钱。虽然现在系统使用有点卡,但是解码播放4K视频从来不卡。进入桌面后它自动适配的分辨率就是4K。 ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220719/1658188450560232199.png) 看一下系统信息: ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220719/1658188489789149951.png) 进入桌面后,操作上感觉比较卡,而且频繁的进入桌面后不久就自动重启。原因可能有分辨率过高,一些系统进程( `unattended-upgrade` )占用太多CPU,开发版内存比较小(只有4G),做了一些调整降低为1K分辨率和关闭自动升级。只是后来是用ssh登录,也就没再去使用桌面了。 接下来就是按照指南,在HiLens管理控制台专业版进行`设备注册`、`下载固件(Device_Agent)和证书`,`传送到开发板进行安装`。还有一步`激活设备`在指南里没有写,用十元优惠券激活一个月。 以上都是一些开发环境的准备工作,再接下来就是下载sdk,进入真正的开发了。 ------------ 这一部分用SDK做了2个案例: 1. 在视频文件/视频流上添加文字 试用首先考虑的效率问题,不考虑安全问题,所以直接用root用户操作。 后面会用到一些库,所以先apt安装`dos2unix`,pip3安装`numpy opencv-python` 将SDK `modelbox-rk-aarch64-1.0.9.6.tar.gz` 解压后,内容如下 ```html root@rock-3a:~/sdk# tree -L 2 --dirsfirst |-- modelbox-rk-aarch64 | |-- bin/ | |-- doc/ | |-- etc/ | |-- flowunit/ | |-- include/ | |-- lib/ | |-- solution/ | |-- template/ | |-- www/ | |-- Third_Party_Open_Source_Software_Notice | |-- modelbox-1.0.0-py3-none-any.whl | `-- version |-- create.py |-- env_set.sh |-- mb-pkg-tool |-- obsutil `-- solution.py ``` 使用 `create.py` 创建hello_world工程后,目录是这样的 ```html `-- hello_world |-- CMake | |-- FindFFMPEG.cmake | `-- Function.cmake |-- bin | |-- main.sh | `-- mock_task.toml |-- data/ |-- dependence | |-- modelbox_requirements.txt | `-- readme.txt |-- etc | `-- flowunit/ |-- flowunit_cpp | `-- CMakeLists.txt |-- graph | |-- hello_world.toml | `-- modelbox.conf |-- hilens_data_dir/ |-- model/ |-- CMakeLists.txt |-- build_project.sh `-- rpm_copyothers.sh ``` 在工程中创建一个叫做draw_text的 `python flowunit` 后,在etc/flowunit下新增了draw_text目录,是这样的: ```html |-- etc | `-- flowunit | |-- cpp | |-- draw_text | | |-- draw_text.py | | `-- draw_text.toml | `-- readme.txt ``` 然后修改`功能单元的处理逻辑`,即`draw_text.py`里的`process`函数,加上在视频帧上打出文字hello world的动作。 修改`hello_world.toml`流程图的配置。 将SDK里自带的一个mp4文件`car_test_video.mp4`拷贝到data目录中。 修改`mock_task.toml`里面的`任务的输入输出配置`,为使用本地mp4文件。输入文件为`../data/car_test_video.mp4`,输出文件为`../hilens_data_dir/hello.mp4` 执行`build_project.sh`进行工程构建。很快,不知道构建了个啥。 执行 `main.sh` 运行应用。 输出有些报错,可以不用管, ```html [2022-07-23 04:31:28,100][ WARN][ timer.cc:208 ] Schedule timer failed, timer is not running. [2022-07-23 04:31:28,100][ERROR][iva_auth_info_updater.cc:29 ] IvaManager::SetIAMAuthInfo Not enough meassage. userId and (domain_id or vas_x_role_name) is empty. [2022-07-23 04:31:28,100][ INFO][iva_auth_info_updater.cc:63 ] IvaManager::SetIAMAuthInfo Not enough meassage. ak is empty. [2022-07-23 04:31:47,109][ INFO][flow_scheduler.cc:397 ] shutdown flow scheduler. [2022-07-23 04:31:47,109][ERROR][flow_scheduler.cc:377 ] the scheduler caught an error : Stop operation [2022-07-23 04:31:47,115][ INFO][ job_manager.cc:82 ] delete job : IVA_JOB ``` 因为目标文件生成了,播放时有Hello World文字在上面的效果。 ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220723/1658551128910423469.png) 再试一下视频流,把摄像头插上开发板上,用`lsusb`可以看到系统识别到了: ```shell Bus 007 Device 002: ID 0c45:64ab Microdia HX-USB Camera ``` 将`hello_world.toml`另存为`hello_world_camera.toml`,在文件里将`video_demuxer`和`video_decoder`去掉,改为`local_camera`。 再修改`mock_task.toml`里面的`任务的输入输出配置`,输入使用摄像头,输出到rtsp,地址为PC上的推流服务。然后在PC上启动windows下的SDK里的`connect_wizard`,使用`开发板侧视频流`启动推流。 执行 `main.sh camera`指定使用配置文件`hello_world_camera.toml`来运行应用: ```bash [2022-07-23 08:04:25,931][ INFO][video_out_flowunit.cc:305 ] video_out url is rtsp://192.168.3.8:8554/outstream [2022-07-23 08:04:25,931][ INFO][video_out_flowunit.cc:266 ] videoout url=rtsp://192.168.3.8:8554/outstream [2022-07-23 08:04:25,946][ INFO][ ffmpeg_writer.cc:55 ] Open url rtsp://192.168.3.8:8554/outstream, format rtsp success ``` 浏览器里自动打开输出实时画面,有添加文字效果。 ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220723/1658564272737216633.png) 2. 视频文件做车辆检测 用检测模型检测出`视频画面中车辆并画框`,输入输出都是视频文件。这个应用作为模板案例已内置在sdk中,不需要另外下载。 先用`create.py`创建`car_det`工程,这次加了一个选项 `-s car_det`,代表使用这个`solution`来创建。可以看到工程目录如下: ```html root@rock-3a:~/sdk/workspace/car_det# tree -L 4 --dirsfirst . |-- CMake | |-- FindFFMPEG.cmake | `-- Function.cmake |-- bin | |-- main.sh | `-- mock_task.toml |-- data | |-- car_test_pic.jpg | |-- car_test_video.mp4 | `-- test_http.py |-- dependence | |-- modelbox_requirements.txt | `-- readme.txt |-- etc | `-- flowunit | |-- cpp | |-- draw_car_bbox | | |-- draw_car_bbox.py | | `-- draw_car_bbox.toml | |-- yolox_post | | |-- yolox_post.py | | |-- yolox_post.toml | | `-- yolox_utils.py | `-- readme.txt |-- flowunit_cpp | `-- CMakeLists.txt |-- graph | |-- car_det.toml | |-- car_det_http.toml | |-- car_det_server.toml | `-- modelbox.conf |-- hilens_data_dir |-- model | `-- yolox_infer | |-- yolox_infer.toml | `-- yolox_nano_288x512.rknn |-- CMakeLists.txt |-- build_project.sh `-- rpm_copyothers.sh ``` 目录中有模型推理单元`yolox_infer`,包含yolox模型文件和模型配置文件。ModelBox内置了rknn推理引擎和推理逻辑,开发者不需编写推理代码。此模型由PyTorch框架训练得到,事先使用[rknn-toolkit2](https://github.com/rockchip-linux/rknn-toolkit2)工具将它转换为RK3568支持的模型格式,可以在[RK3568模型转换验证案例](https://developer.huaweicloud.com/develop/aigallery/notebook/detail?id=a7072b40-690e-4d98-be64-64a00f6fc69a)中查看模型转换过程。 推理后的后处理在flowunit里,有`yolox_post`和`draw_car_bbox`,做后处理,然后做画框展示。 工程有3个流程图。默认流程图是`car_det.toml`,运行它来看看效果,先`build_project.sh`再`main.sh`运行,12秒的视频,处理耗时48秒: ```html [2022-07-23 09:26:55,104][ INFO][ ffmpeg_writer.cc:55 ] Open url /root/sdk/workspace/car_det/bin/../hilens_data_dir/car_test_result.mp4, format mp4 success [2022-07-23 09:27:43,049][ INFO][ffmpeg_video_demuxer.cc:147 ] Stream /root/sdk/workspace/car_det/bin/../data/car_test_video.mp4 is end ``` ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220723/1658569230491889592.png) 在来看http服务,输入一个图片,给出检测结果图片的。运行`main.sh http`指定使用`car_det_http.toml`流程图: ```html [2022-07-23 09:52:01,939][ INFO][httpserver_sync_receive.cc:188 ] Start server at http://0.0.0.0:8083/v1/car_det ``` 使用`test_http.py`调用这个http服务: ```json root@rock-3a:~/sdk/workspace/car_det/data# python test_http.py test_http.py:33: DeprecationWarning: tostring() is deprecated. Use tobytes() instead. img_str = cv2.imencode('.jpg', img_data)[1].tostring() response: {"det_result": "[[0.07672460377216339, 0.3569239377975464, 0.2763637900352478, 0.7063356041908264, 0.7665719985961914, 2.0], [0.6121819615364075, 0.09047098457813263, 0.7309271693229675, 0.28249451518058777, 0.72760009765625, 2.0], [0.38874685764312744, 0.17702166736125946, 0.4968656301498413, 0.36404821276664734, 0.6740775108337402, 2.0], [0.2635308504104614, 0.0011769375996664166, 0.3374212980270386, 0.02468840591609478, 0.34745872020721436, 2.0]]"} ``` 查看生成的结果文件: ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220723/1658570138919170372.png) 到这里就告一段落。 ------------ 这一部分是:使用yolov3做口罩检测 口罩检测不同于车辆检测,车辆检测内置于SDK中,模型文件、相关配置都作为解决方案提供了,创建好工程就在那里了。而口罩检测需要自行下载模型和配置文件,并放置到对应的工程目录,其实也很方便。 [下载地址](https://e-share.obs-website.cn-north-1.myhuaweicloud.com/?token=0awK+RuZ0De/GWps7y6qRVUhiXBsrkH2u+k5falBeP5XXOarM+Di1r8ihSd3itx9pxg+nA9lLRCNJO7VSLN/lshflsGfY/h2grPHXTypyDCJdYuB/B+D2hKo4iJ2B7PtAIOf4URv6Hswp36TKPJ8w+r4eE4WXqKEIfEeS/A+AnTMW5Qytd+kQhtN1c1FdCLj5jBza4nBK0urxGiS4YI2Q6boNdz8Mv5eJAXDOBm5V2phU5P6DP1E9409/ZTWYBDhWHui3OczoHLjIzh3xUltlClfy6DyoKAzkshw9LrFOInUyUhfnihJzag95HFiETwq2e0gn3VHmM+cXcijxt+QP5JwFMwZLWBbFUw6V5eGXJRnaIMW97Hfqfb3wLCe//RNigcP4L4JJ3YOvENQWJxxC3rl6uvo2zFlDkbuKdMqfFM1UlB/8HpYsrlKXrKRI092ai4E2Xh6VRs0tl7m0HQOzDJWwv4WpZ2v8YNX9hNskNbbiayscw9gEY4iwpFSykdGzNK5Enb63QiNbuYFBGdmtUMvp1DDqEpTBi4+VzzXNn2xjUo2qu2FQq6QAfLBzcmh+SiGJ5bGQaMhxb6mEQwzj4qoVJ5C6PoonbPqWqIkdV4=),提取码 modbox 选择`common.zip`(功能单元和配置、任务配置、测试视频 5M) 和`rknpu2.zip`(推理功能单元和流程配置 14M)下载即可。 仍然是先用 `create.py` 创建名为`mask_det_yolo3`的工程,然后用`-t infer`选项创建一个名为`mask_infer`的推理功能单元,会在工程目录的model下生成以下内容 ```html |-- model | `-- mask_infer | `-- mask_infer.toml ``` 将rknpu2.zip里面的rknn模型文件和2个配置文件放入(覆盖原mask_infer.toml): ```html workspace/mask_det_yolo3/model/mask_infer/ |-- mask_infer.toml |-- yolo3_resnet18_mask_det_288x512.toml `-- yolo3_resnet18_mask_det_288x512_rknpu2.rknn ``` `mask_infer.toml`里定义了三个模型的输出,应该是对于`head头肩部`、`face`、`mask口罩`的信息。 接下来使用参数`-t python`创建2个功能单元,分别是`yolo3_post`后处理,和`draw_mask_bbox`在原图上画框展示,生成内容如下: ```html workspace/mask_det_yolo3/etc/ `-- flowunit |-- cpp |-- draw_mask_bbox | |-- draw_mask_bbox.py | `-- draw_mask_bbox.toml |-- readme.txt `-- yolo3_post |-- yolo3_post.py `-- yolo3_post.toml ``` 将common.zip里面的功能单元内容复制进去覆盖原文件。 带没带口罩的结果的展示,其逻辑是在画图单元实现:如果face检测框与mask检测框的`重合度`大于某个阈值,就判为佩戴口罩;否则,就判为没有佩戴口罩;如果没有检测到face检测框,就会显示Unknown。 接下来就是`串流程图`(graph/mask_det_yolo3.toml),和`配置任务的输入输出`(bin/mock_task.toml),当然下载里都有已经配置好的文件,拷贝到对应目录。同时把测试视频也拷贝到data目录。 `mask_det_yolo3.toml`里定义了: 各个功能单元的处理流转流程 ```c data_source_parser > video_demuxer > video_decoder > image_resize > mask_detection > yolo3_post > draw_mask_bbox > video_out ``` 以及 功能单元之间的输出输入之间的接口对接配置,比较细节就不说了。 配置任务的输入输出在hello_world和车辆检测部分说过,也不说了。 准备工作到此结束,下面就是进入工程目录,进行`build_project.sh`然后`bin/main.sh`运行应用进行视频文件的戴口罩检测,并输出结果到视频文件。 ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220728/1658997388103140538.png) 下载的里面还有一个camera的配置文件,是可以将输入输出都配置为视频流来使用的,这个晚点再试一下。
  • [其他] ModelBox框架抽象出的概念
    通过ModelBox开发应用时,开发者需要将`应用程序的逻辑`表达为`流程图`,应用功能被拆分为多个功能单元。 这个也比较好理解,程序代码的逻辑也是可以用流程来表达的,比如常见的顺序的流程,还有各种语言都支持的控制流程,比如分支、循环等等。 采用这种方式的目的/好处有: 1. 对数据流(如视频)处理可以利用多段流水线并行提供吞吐量; 2. 通用的功能单元可以复用; 3. 通用的流程图可以复用。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/22/1658483217040636823.png) 左进右出。数据由`Input Node`产生,流向`Process Node`,然后汇聚到`Sink Node`。整个流程就是`Flow`。
  • [其他] AI推理开发框架 - ModelBox简介
    说,有这么一个AI推理开发框架, 它能帮助AI开发者解决一些痛点, 什么痛点呢? 1. 帮你比较高效的处理一些AI落地中的脏活、累活、杂活、却又不得不干的活。比如:视频图片解码、HTTP服务、预处理、后处理、多模型复杂业务串联、运维、打包等 2. 说的就是你,算法开发人员。你开发的算法性能还行吗?可靠性还好吗?高性能,高可靠场景改造工作量大不大?很大。 那就来看一下ModelBox的特点, ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/22/1658468386612568415.png) 以及它能解决的问题: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/22/1658468422916634271.png)
  • [业界动态] 华为云发布ModelBox AI应用开发框架 实现AI应用一次开发全场景部署
    6月15日,以“因聚而生,为你所能”为主题的华为伙伴暨开发者大会 2022隆重开幕,华为云CEO张平安发表“共创新价值,一切皆服务”主题演讲,并重磅发布了华为云ModelBox AI应用开发框架,打通端边云边界,助力开发者实现AI应用一次开发,全场景部署。  华为云CEO张平安发布包括ModelBox在内的15大新服务  去年华为云发布了盘古预训练大模型,让AI开发由作坊式转变为工业化开发的新模式,但是AI的应用开发和部署仍然面临很多挑战,面向多样化的云边端场景,行业开发者平均需要花费1~2个月来完成AI应用对多种运行设备和系统的开发适配,耗时耗力。  为解决这一难题,打通AI落地“最后一公里”,华为云再次对AI开发生产线ModelArts进行重磅升级——发布ModelBox AI应用开发框架,帮助开发者屏蔽底层软硬件差异,实现AI应用一次开发,全场景部署,让AI开发者无需学习复杂的底层技术及繁多的系统API就能开发出高性能的AI应用。  华为云ModelBox AI应用开发框架具备以下三大创新能力:  高性能并发调度引擎提升推理性能 2-10倍  相较传统AI应用串行的开发方式,ModelBox应用中所有任务以功能单元形式封装,运行时内置的并发调度引擎实现数据计算和资源管理的精细化智能调度,同时集成了特别优化过的硬件加速单元,可以实现推理性能大幅提升。  自适应异构计算组件缩短跨平台开发周期80%  预置丰富的应用编排异构计算组件,覆盖主流芯片、操作系统、推理框架,让开发者不必学习平台的软硬件差异,实现一次开发,全场景部署,降低了开发者学习底层优化API的难度,可以明显缩短开发周期。  端边云AI协同单元降低运维成本30%  框架中提供的端边云AI协同单元让开发者快速生成格式统一的AI应用,结合应用场景一键部署到端边云不同的设备上运行。结合云上管理平台,可以实现对模型的精细化管理,降低运维成本。  在油气行业中,实体三维重建及定位是复杂设备维修、维护的重要手段,需要端侧设备在开阔空间中能够快速完成定位,且误差不超过1厘米。相当于要在几毫秒之内,从十个足球场面积的图片中识别出螺丝钉大小的物体。重建及定位算法的求解需要PnP、RANSAC等十余个子算法的相互协同。  传统的AI应用开发方式因缺乏灵活编排异构计算单元的手段,无法高效调度计算资源,推理时延长达上百毫秒,难以满足开阔空间毫秒级三维重建定位的要求  3D重建和定位识别等高性能AI应用能够结合AR眼镜流畅运行  华为云ModelBox AI开发应用框架具备独有的高性能并发调度引擎,可将计算资源合理调度到GPU、CPU、NPU等多种芯片上,通过芯片级并行计算,提升推理性能2-10倍。ModelBox打通端边云边界,统一模型应用接口和打包格式,让AI应用可以便捷的部署到各种异构计算平台,由端侧运行低延时小模型,边侧承担综合计算任务,云侧承载复杂的大模型。通过高效协同端边云计算资源,实现开阔空间厘米级精度的三维重建及定位,并将时延控制在毫秒级。基于Modelbox,开发一个新器件的三维重建应用的周期从两个月缩短到了一周。  统一模型应用接口和打包格式,让AI应用可以便捷的部署到各种异构计算平台  目前,华为云ModelBox AI应用开发框架已进行了开源,并与北京亮亮视野科技有限公司(以下简称亮亮视野)等30多家软硬件生态伙伴进行战略合作。  亮亮视野是国内TOP级AR眼镜设备提供商,服务了覆盖工业、能源、航空、制造等行业的5000多家领军企业。亮亮视野COO娄身强表示,ModelBox改变了过去重复开发定制交付的模式,可以将开发团队从繁琐的软硬件适配、调优工作中解放出来,让伙伴更加聚焦于产品本身的开发,实现了研发效能的提升。  同时,ModelBox为亮亮视野等硬件厂商提供了广阔的生态合作机会。一方面,AR眼镜等硬件设备基于云上的海量AI应用可以快速扩展AI技能,另一方面,基于ModelBox提供的统一接口和格式,AI算法能够更便捷地运行在各种智能设备上,在端边云协同的场景中形成生态互补优势,解决行业AI应用落地的难题。  技术升级的浪潮成为了社会前行的核心动力来源之一。华为云将不断创新,继续和合作伙伴、开发者一起,通过经验即服务、技术即服务、基础设施即服务,实现一切皆服务,共创新价值。*转载自https://m.it168.com/articleq_6747139.html