• [问题求助] 媒体数据处理V2,JPEGD功能里面hi_mpi_vdec_get_frame 接口 返回码0xA005800E
    【功能模块】hi_mpi_vdec_get_frame【操作步骤&问题现象】问题1:按照文档中示例代码-JPEGD图片解码-媒体数据处理V2-图像/视频数据处理-应用开发(C&C++)-推理应用开发-5.1.RC2.alpha001-CANN社区版本-文档首页--昇腾社区 (hiascend.com)一步一步做下去,发现hi_mpi_vdec_get_frame的返回码为0xA005800E,经查看文档,显示是这个错误引发这个错误的原因没有找到希望得到大家的帮助。问题2:标红的那几个hi_vdec_stream 类型的变量是什么关系,是同一个吗?我有点蒙了??【截图信息】下面是我的部分代码,请大佬们看看是不是有哪些地方我疏忽了。【日志信息】(可选,上传日志内容或者附件)
  • [视频点播] 视频点播配合播放器支持试看
    试看是指用户在观看音视频时,只能观看指定时长的内容。适用在付费、会员等场景。通常有以下几种试看方案:单独剪辑一个固定时长的视频文件。优点:安全性高,有效防止播放连接泄露,用户试看时只能拿到试看视频的播放地址,无法获取原始视频播放地址,实现简单,可分发。缺点:不能灵活支持不同的试看时长服务端支持试看。优点:安全可靠。缺点:需基于CDN能力支持试看。各厂家支持的格式不同,场景单一,无法灵活的支持多种格式的试看场景。在播放器端适配试看时长。优点:实现简单,配置方便。缺点:无法防止恶意用户抓取完整播放连接盗播。本文介绍一种基于播放器端控制播放时长,并结合视频点播防盗链的解决方案,做到灵活支持试看时长,配置方便,安全可靠。 步骤1、在视频点播平台配置防盗链,防盗链过期时间可设置成5-10min(根据试看时长设置)步骤2、生成带防盗链播放地址,在播放器设置试看时长,并且通过防盗链阻止用户抓取连接恶意盗播。 备注:可独立配置一个试看域名,配置防盗链时长。再配置一个正常播放的域名,在用户付费后,提供该域名对应的播放地址。 // 本文以播放器demo为例介绍试看简单实现。video_play播放地址src修改成实际可播放地址// 若需实现更精准的试看,可通过播放地址响应的错误码,及时更新防盗链秘钥信息。<!DOCTYPE html><html>    <head>        <meta charset="utf-8" />        <title></title>    </head>     <body>        <video id="video_play" src="https://example.hw-vod-play-xx.com/test.mp4?auth_info=xx***" controls="controls" autoplay height="100%" width="100%"></video>         <button id="fd_button" type="button" style="text-align: center;" onclick="fullScreen(document.getElementById('video_play'))">全屏</button>    </body>     <div style="display: none" align="center" id="video_show" >        <p style="font-size: 12px;margin-top: 10px;">您的试看已结束!</p>    </div>     <script src="./jquery-3.3.1.min.js"></script>    <script type="text/javascript">     // 注意不同浏览器兼容    function fullScreen(element) {      if(element.requestFullScreen) {        element.requestFullScreen();        } else if(element.mozRequestFullScreen) {        element.mozRequestFullScreen();      } else if(element.webkitRequestFullScreen) {        element.webkitRequestFullScreen();       }    }     var video = document.getElementById("video_play");    // 试看控制标识,如会员,付费等    var video_status = 0;    if (video_status !=1){        if(video){            video.addEventListener("timeupdate",function(){                var timeDisplay = Math.floor(video.currentTime);                // 单位:秒                if(timeDisplay>6*60){                    video.pause()                    this.webkitExitFullScreen();                    // 试看结束,隐藏视频以及相关属性                     video.setAttribute('src','');                      video.style.display="none";                     fd_button.style.display="none";                     //试看结束,显示提示                    $('#video_show').show();                }            },false)        }    }    </script></html>
  • [技术干货] 支持Caffe_Tensorflow_ONNX_MindSpore架构_最高达10Tops算力_4K70_编解码核心板开发
    本文介绍了AI-MD55x55M核心板是针对基于NPU+AI ISP的SoC 媒体处理芯片开发的编解码核心板,用于给客户展示芯片强大的多媒体功能和丰富的外围接口,同时为客户提供 基于SoC的产品硬件PCBA,将芯片具备的资源完整开放出来,可根据各种使用场景设计相应的底板,模块的设计降低了的开发周期和开发成本与风险。                                         主控关键特性已经全部开放出来:智能加速4Tops INT8 NN加速引擎,双核Vision Q6的DSP处理;支持4K60的H.265/H.264编码,支持10路1080p30的H.265/H.264解码;支持4路4Mp30机内实时硬化拼接,支持2路4K p30机内实时硬化拼接;高速接口支持USB3.0和PCIe2.0高速接口。内置智能视频分析神经网络加速引擎,高达 4Tops INT8 支持INT4/FP16 ,支持完整的API和工具链,易于开发 ,双核 Vision Q6 DSP 32K I-Cache /32K D-Cache /32K IRAM/320K DRAM,内置智能计算加速引擎,双目深度加速单元,以及矩阵计算加速单元。                                                                                                                        引脚原理图AI ISP升级主要体现在,超感光降噪:信噪比提升了4倍;多光谱融合:红外补光,既有全彩又有细节;超级宽动态:动态范围扩大12dB,同时获得明亮细节和暗部细节;超级稳像:在运动条件下获得稳定画面;多维度感知:形象感知的同时进行物理量的标注。复制链接进入,了解测试IPC测试对比视频:https://cloud.tencent.com/developer/article/1973592
  • [行业资讯] 物联网技术助力油料保障
    本报讯 郭昀博、吴昊阳报道:近日,东部战区海军航空兵某场站油料仓库监控室内,油料保管员邓相文轻轻敲击键盘,库区内多个储油罐的相关数据便立即显示在大屏幕上。“有了这套物联网管理信息系统,官兵足不出户便可完成过去费时费力的油料存量检测工作。”该场站领导介绍,他们借助物联网技术改进油料管理方式,油料保障效能显著提升。近年来,随着部队实战化训练深入推进,战机出动频率加快、飞行架次增多,油料保障压力随之增大,如何提高保障效率成为该场站党委关注的一个重要课题。经过调研论证,他们决定从油料管理入手,引入物联网管理信息系统,将油库巡检、消防报警、安防监控等系统有机整合,实现油库业务数字化管理。同时,该场站选派业务骨干赴厂家学习进修,熟悉掌握系统操作和维护流程;通过物联网管理信息系统梳理统计单件装备油料使用情况和消耗数量,精准测算每个环节的数据,推动油料保障从“经验型”向“精确型”转变。此外,他们加强油料专用装备维护管理,组织业务骨干集中研讨优化保障流程,细化完善特情处置演练方案,确保物联网管理信息系统发挥最大效益。近期,该场站组织油库区应急消防演练,巡线员发现“火情”后,依托物联网管理信息系统“一键报警”。抢险分队闻令而动,迅速处置“火情”。(来源:解放军报)原文链接:https://new.qq.com/rain/a/20220703A02K5U00.html
  • [技术干货] 使用JojoGAN创建风格化的面部图
    介绍风格迁移是神经网络的一个发展领域,它是一个非常有用的功能,可以集成到社交媒体和应用程序中。几个神经网络可以根据训练数据将图像样式映射和传输到输入图像。在本文中,我们将研究 JojoGAN,以及仅使用一种参考样式来训练和生成具有该样式的任何图像的过程。JoJoGAN:One Shot Face StylizationOne Shot Face Stylization(一次性面部风格化)可用于 AI 应用程序、社交媒体过滤器、有趣的应用程序和业务用例。随着 AI 生成的图像和视频滤镜的日益普及,以及它们在社交媒体和短视频、图像中的使用,一次性面部风格化是一个有用的功能,应用程序和社交媒体公司可以将其集成到最终产品中。因此,让我们来看看用于一次性生成人脸样式的流行 GAN 架构——JojoGAN。JojoGAN 架构JojoGAN 是一种风格迁移程序,可让将人脸图像的风格迁移为另一种风格。它通过GAN将参考风格图像反转为近似的配对训练数据,根据风格化代码生成真实的人脸图像,并与参考风格图像相匹配。然后将该数据集用于微调 StyleGAN,并且可以使用新的输入图像,JojoGAN 将根据 GAN 反转(inversion)将其转换为该特定样式。JojoGAN 架构和工作流程JojoGAN 只需一种参考风格即可在很短的时间内(不到 1 分钟)进行训练,并生成高质量的风格化图像。JojoGan 的一些例子JojoGAN 生成的风格化图像的一些示例:风格化的图像可以在各种不同的输入风格上生成并且可以修改。JojoGan 代码深潜让我们看看 JojoGAN 生成风格化人像的实现。有几个预训练模型可用,它们可以在我们的风格图像上进行训练,或者可以修改模型以在几分钟内更改风格。JojoGAN 的设置和导入克隆 JojoGAN 存储库并导入必要的库。在 Google Colab 存储中创建一些文件夹,用于存储反转代码、样式图像和模型。!git clone https://github.com/mchong6/JoJoGAN.git%cd JoJoGAN!pip install tqdm gdown scikit-learn==0.22 scipy lpips dlib opencv-python wandb!wget https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip!sudo unzip ninja-linux.zip -d /usr/local/bin/import torchtorch.backends.cudnn.benchmark = Truefrom torchvision import transforms, utilsfrom util import *from PIL import Imageimport mathimport randomimport osimport numpyfrom torch import nn, autograd, optimfrom torch.nn import functionalfrom tqdm import tqdmimport wandbfrom model import *from e4e_projection import projectionfrom google.colab import filesfrom copy import deepcopyfrom pydrive.auth import GoogleAuthfrom pydrive.drive import GoogleDrivefrom google.colab import authfrom oauth2client.client import GoogleCredentials模型文件使用 Pydrive 下载模型文件。一组驱动器 ID 可用于预训练模型。这些预训练模型可用于随时随地生成风格化图像,并具有不同的准确度。之后,可以训练用户创建的模型。#Download models#optionally enable downloads with pydrive in order to authenticate and avoid drive download limits.download_with_pydrive = True  device = 'cuda' #['cuda', 'cpu']!wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2!bzip2 -dk shape_predictor_68_face_landmarks.dat.bz2!mv shape_predictor_68_face_landmarks.dat models/dlibshape_predictor_68_face_landmarks.dat%matplotlib inlinedrive_ids = {   "stylegan2-ffhq-config-f.pt": "1Yr7KuD959btpmcKGAUsbAk5rPjX2MytK",   "e4e_ffhq_encode.pt": "1o6ijA3PkcewZvwJJ73dJ0fxhndn0nnh7",   "restyle_psp_ffhq_encode.pt": "1nbxCIVw9H3YnQsoIPykNEFwWJnHVHlVd",   "arcane_caitlyn.pt": "1gOsDTiTPcENiFOrhmkkxJcTURykW1dRc",   "arcane_caitlyn_preserve_color.pt": "1cUTyjU-q98P75a8THCaO545RTwpVV-aH",   "arcane_jinx_preserve_color.pt": "1jElwHxaYPod5Itdy18izJk49K1nl4ney",   "arcane_jinx.pt": "1quQ8vPjYpUiXM4k1_KIwP4EccOefPpG_",   "arcane_multi_preserve_color.pt": "1enJgrC08NpWpx2XGBmLt1laimjpGCyfl",   "arcane_multi.pt": "15V9s09sgaw-zhKp116VHigf5FowAy43f",   "sketch_multi.pt": "1GdaeHGBGjBAFsWipTL0y-ssUiAqk8AxD",   "disney.pt": "1zbE2upakFUAx8ximYnLofFwfT8MilqJA",   "disney_preserve_color.pt": "1Bnh02DjfvN_Wm8c4JdOiNV4q9J7Z_tsi",   "jojo.pt": "13cR2xjIBj8Ga5jMO7gtxzIJj2PDsBYK4",   "jojo_preserve_color.pt": "1ZRwYLRytCEKi__eT2Zxv1IlV6BGVQ_K2",   "jojo_yasuho.pt": "1grZT3Gz1DLzFoJchAmoj3LoM9ew9ROX_",   "jojo_yasuho_preserve_color.pt": "1SKBu1h0iRNyeKBnya_3BBmLr4pkPeg_L",   "art.pt": "1a0QDEHwXQ6hE_FcYEyNMuv5r5UnRQLKT",}# from StyelGAN-NADAclass Downloader(object):   def __init__(self, use_pydrive):       self.use_pydrive = use_pydrive       if self.use_pydrive:           self.authenticate()   def authenticate(self):       auth.authenticate_user()       gauth = GoogleAuth()       gauth.credentials = GoogleCredentials.get_application_default()       self.drive = GoogleDrive(gauth)   def download_file(self, file_name):       file_dst = os.path.join('models', file_name)       file_id = drive_ids[file_name]       if not os.path.exists(file_dst):           print(f'Downloading {file_name}')           if self.use_pydrive:               downloaded = self.drive.CreateFile({'id':file_id})               downloaded.FetchMetadata(fetch_all=True)               downloaded.GetContentFile(file_dst)           else:               !gdown --id $file_id -O $file_dstdownloader = Downloader(download_with_pydrive)downloader.download_file('stylegan2-ffhq-config-f.pt')downloader.download_file('e4e_ffhq_encode.pt')加载生成器加载原始和微调生成器。设置用于调整图像大小和规范化图像的 transforms。latent_dim = 512# Load original generatororiginal_generator = Generator(1024, latent_dim, 8, 2).to(device)ckpt = torch.load('models/stylegan2-ffhq-config-f.pt', map_location=lambda storage, loc: storage)original_generator.load_state_dict(ckpt["g_ema"], strict=False)mean_latent = original_generator.mean_latent(10000)# to be finetuned generatorgenerator = deepcopy(original_generator)transform = transforms.Compose(   [       transforms.Resize((1024, 1024)),       transforms.ToTensor(),       transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),   ])输入图像设置输入图像位置。对齐和裁剪面并重新设置映射的样式。#image to the test_input directory and put the name herefilename = 'face.jpeg' #@param {type:"string"}filepath = f'test_input/{filename}'name = strip_path_extension(filepath)+'.pt'# aligns and crops facealigned_face = align_face(filepath)# my_w = restyle_projection(aligned_face, name, device, n_iters=1).unsqueeze(0)my_w = projection(aligned_face, name, device).unsqueeze(0)预训练图选择预训练好的图类型,选择不保留颜色的检查点,效果更好。plt.rcParams['figure.dpi'] = 150pretrained = 'sketch_multi' #['art', 'arcane_multi', 'sketch_multi', 'arcane_jinx', 'arcane_caitlyn', 'jojo_yasuho', 'jojo', 'disney']#Preserve color tries to preserve color of original image by limiting family of allowable transformations.if preserve_color:   ckpt = f'{pretrained}_preserve_color.pt'else:   ckpt = f'{pretrained}.pt'生成结果加载检查点和生成器并设置种子值,然后开始生成风格化图像。用于 Elon Musk 的输入图像将根据图类型进行风格化。#Generate resultsn_sample =  5#{type:"number"}seed = 3000 #{type:"number"}torch.manual_seed(seed)with torch.no_grad():   generator.eval()   z = torch.randn(n_sample, latent_dim, device=device)   original_sample = original_generator([z], truncation=0.7, truncation_latent=mean_latent)   sample = generator([z], truncation=0.7, truncation_latent=mean_latent)   original_my_sample = original_generator(my_w, input_is_latent=True)   my_sample = generator(my_w, input_is_latent=True)# display reference imagesif pretrained == 'arcane_multi':   style_path = f'style_images_aligned/arcane_jinx.png'elif pretrained == 'sketch_multi':   style_path = f'style_images_aligned/sketch.png'else:      style_path = f'style_images_aligned/{pretrained}.png'style_image = transform(Image.open(style_path)).unsqueeze(0).to(device)face = transform(aligned_face).unsqueeze(0).to(device)my_output = torch.cat([style_image, face, my_sample], 0)生成的结果结果生成为预先训练的类型“Jojo”,看起来相当准确。现在让我们看一下在自创样式上训练 GAN。使用你的风格图像进行训练选择一些面部图,甚至创建一些自己的面部图并加载这些图像以训练 GAN,并设置路径。裁剪和对齐人脸并执行 GAN 反转。names = ['1.jpg', '2.jpg', '3.jpg']targets = []latents = []for name in names:   style_path = os.path.join('style_images', name)   assert os.path.exists(style_path), f"{style_path} does not exist!"   name = strip_path_extension(name)   # crop and align the face   style_aligned_path = os.path.join('style_images_aligned', f'{name}.png')   if not os.path.exists(style_aligned_path):       style_aligned = align_face(style_path)       style_aligned.save(style_aligned_path)   else:       style_aligned = Image.open(style_aligned_path).convert('RGB')   # GAN invert   style_code_path = os.path.join('inversion_codes', f'{name}.pt')   if not os.path.exists(style_code_path):       latent = projection(style_aligned, style_code_path, device)   else:       latent = torch.load(style_code_path)['latent']   latents.append(latent.to(device))targets = torch.stack(targets, 0)latents = torch.stack(latents, 0)微调 StyleGAN通过调整 alpha、颜色保留和设置迭代次数来微调 StyleGAN。加载感知损失的鉴别器并重置生成器。#Finetune StyleGAN#alpha controls the strength of the stylealpha =  1.0 # min:0, max:1, step:0.1alpha = 1-alpha#preserve color of original image by limiting family of allowable transformationspreserve_color = False #Number of finetuning steps.num_iter = 300#Log training on wandb and interval for image logginguse_wandb = False log_interval = 50if use_wandb:   wandb.init(project="JoJoGAN")   config = wandb.config   config.num_iter = num_iter   config.preserve_color = preserve_color   wandb.log(   {"Style reference": [wandb.Image(transforms.ToPILImage()(target_im))]},   step=0)# load discriminator for perceptual lossdiscriminator = Discriminator(1024, 2).eval().to(device)ckpt = torch.load('models/stylegan2-ffhq-config-f.pt', map_location=lambda storage, loc: storage)discriminator.load_state_dict(ckpt["d"], strict=False)# reset generatordel generatorgenerator = deepcopy(original_generator)g_optim = optim.Adam(generator.parameters(), lr=2e-3, betas=(0, 0.99))训练生成器从潜在空间生成图像,并优化损失。if preserve_color:   id_swap = [9,11,15,16,17]z = range(numiter)for idx in tqdm( z):   mean_w = generator.get_latent(torch.randn([latents.size(0), latent_dim]).to(device)).unsqueeze(1).repeat(1, generator.n_latent, 1)   in_latent = latents.clone()   in_latent[:, id_swap] = alpha*latents[:, id_swap] + (1-alpha*mean_w[:, id_swap]   img = generator(in_latent, input_is_latent=True)   with torch.no_grad():       real_feat = discriminator(targets)       fake_feat = discriminator(img)   loss = sum([functional.l1_loss(a, b) for a, b in zip(fake_feat, real_feat)])/len(fake_feat)         if use_wandb:       wandb.log({"loss": loss}, step=idx)       if idx % log_interval == 0:           generator.eval()           my_sample = generator(my_w, input_is_latent=True)           generator.train()           wandb.log(           {"Current stylization": [wandb.Image(my_sample)]},           step=idx)   g_optim.zero_grad()   loss.backward()   g_optim.step()使用 JojoGAN 生成结果现在生成结果。下面已经为原始图像和示例图像生成了结果以进行比较。#Generate resultsn_sample =  5seed = 3000torch.manual_seed(seed)with torch.no_grad():   generator.eval()   z = torch.randn(n_sample, latent_dim, device=device)   original_sample = original_generator([z], truncation=0.7, truncation_latent=mean_latent)   sample = generator([z], truncation=0.7, truncation_latent=mean_latent)   original_my_sample = original_generator(my_w, input_is_latent=True)   my_sample = generator(my_w, input_is_latent=True)# display reference imagesstyle_images = []for name in names:   style_path = f'style_images_aligned/{strip_path_extension(name)}.png'   style_image = transform(Image.open(style_path))   style_images.append(style_image)face = transform(aligned_face).to(device).unsqueeze(0)style_images = torch.stack(style_images, 0).to(device)my_output = torch.cat([face, my_sample], 0)output = torch.cat([original_sample, sample], 0)生成的结果现在,你可以使用 JojoGAN 生成你自己风格的图像。结果令人印象深刻,但可以通过调整训练方法和训练图像中的更多特征来进一步改进。结论JojoGAN 能够以快速有效的方式准确地映射和迁移用户定义的样式。关键要点是:· JojoGAN 可以只用一种风格进行训练,以轻松映射并创建任何面部的风格化图· JojoGAN 非常快速有效,可以在不到一分钟的时间内完成训练· 结果非常准确,类似于逼真的肖像· JojoGAN 可以轻松微调和修改,使其适用于 AI 应用程序因此,无论风格类型、形状和颜色如何,JojoGAN 都是用于风格转移的理想神经网络,因此可以成为各种社交媒体应用程序和 AI 应用程序中非常有用的功能。       原文标题 : 使用JojoGAN创建风格化的面部图
  • [行业资讯] Spacee将表面转化为客户体验
    计算机视觉专家 Spacee 推出了 HoverTouch,这是一种即插即用的解决方案,可以将店内表面(如墙壁或玻璃)转变为交互式客户体验。HoverTouch还可以投射到产品上,例如展厅中的汽车。零售商还可以安装具有突出表面的专用信息亭解决方案,称为 HoverTouch React。零售商能够通过 HoverTouch 收集和分析每次客户互动的数据。使用HoverTouch,购物者不必触摸表面就可以与之交互——购物者可以将手悬停在表面上,以推动非接触式交互。客户体验非常类似于人们在网上使用光标所做的事情,将鼠标悬停在他们感兴趣的项目上并单击。HoverTouch Connect 功能使零售商、消费者品牌商及其代理机构能够控制内容、用户体验和设备管理,并提供可操作的数据。它允许客户及其代理机构在符合 HTML5 的媒体播放器中设计内容和部署内容。该系统旨在允许零售商轻松重用或重新利用现有内容。HoverTouch Connect 还允许零售商捕获有关客户交互的详细数据,这与电子商务交互期间收集的数据相当。据 Spacee 称,HoverTouch 的即插即用安装只需几分钟。最早使用 Spacee HoverTouch 的零售商之一是奥迪达拉斯,它是美国销量排名前 10 的奥迪经销商之一。拥有并经营奥迪达拉斯的福布斯托德汽车集团(Forbes Todd Automotive Group)总裁兼首席执行官汤姆·麦科勒姆(Tom McCollum)表示:“消费者又回到了商店,我们希望为他们提供令人难以置信的体验。我们研究了许多交互式体验产品,发现Spacee的HoverTouch不仅提供了最好的客户体验,而且最容易安装和运行。我们使用该产品的时间还不长,但已经看到我们使用 HoverTouch 推广的产品实现了两位数的店内销售额增长。”Spacee 创始人兼首席执行官 Skip Howard 表示:“零售商迫切需要数据,而 Spacee HoverTouch 可以提供与在线收集的数据相当的客户体验数据。我们很高兴将其推向市场,也很高兴我们的客户已经看到了对店内销售的显著影响。”
  • [新手课堂] 资讯| 【媒体报道】湖南日报头版:三大支撑 夯实基础,湘江鲲鹏服务器助力高考阅卷
    近日,湖南省政府办公厅印发《湖南省强化“三力”支撑规划(2022—2025年)》。规划明确,力争到2025年,电力、算力、动力体系建设取得重大进展,实现3个大幅提升。湘江鲲鹏是湖南省国产算力体系中的佼佼代表,是湖南“两芯一生态”战略的重要组成。6月13日,湖南省人民政府门户网站和湖南日报头版分别对湘江鲲鹏进行了重点报道。以下是报道详细内容:三大支撑 夯实基础 | 湘江鲲鹏服务器助力高考阅卷高考已结束,高考阅卷正在紧张进行。记者6月12日从湖南湘江鲲鹏信息科技有限责任公司(以下简称“湘江鲲鹏”)获悉,自2020年至今,以湘江鲲鹏国产鲲鹏智能计算硬件架构为算力底座的高考网上评阅卷系统,已在贵州省高考评卷中连续应用3年,全方位守护考生每一分。在鲲鹏服务器的强大算力之下,考生答卷被高速智能扫描仪生成了清晰的电子文档;随后,客观题部分由计算机自动识别判分;主观题部分则按照题号被“切割”成了电子图像,实时出现在每位评卷老师的电脑之中。对标此前使用的服务器,湘江鲲鹏的鲲鹏服务器算力提升30%以上,但功耗降低20%;评卷系统页面打开及操作响应在0.5秒以内,无连接超时或服务挂起等问题发生,满足了高考网上评卷时间短、要求高、并发量大等要求。湘江鲲鹏相关负责人表示,选用鲲鹏服务器进行网上评卷,具有高性能计算、高可靠性、高能效等优势;更重要的是,高考试卷属于国家机密,鲲鹏服务器基于整机自研,算力基础安全可靠,对于高考评卷中涉及的相关信息、数据的处理与存储,能进行全方位的安全保密。目前,湘江鲲鹏紧抓技术迭代升级,联合华为、拓维信息在鲲鹏、昇腾、开源鸿蒙、云等方面进行全产业链合作,聚焦关键行业应用场景,构建自主创新的生态体系,致力为湖南高质量发展注入强大的“算力”动力。转自鲲鹏创新中心公众号
  • [Atlas 200] NPU+AI ISP_4T+6T_4K60编码_编解码核心板案例
    本文介绍了AI-MD55x55M核心板是针对基于NPU+AI ISP的SoC 媒体处理芯片开发的编解码核心板,用于给客户展示芯片强大的多媒体功能和丰富的外围接口,同时为客户提供 基于SoC的产品硬件PCBA,将芯片具备的资源完整开放出来,可根据各种使用场景设计相应的底板,模块的设计降低了的开发周期和开发成本与风险。                                         主控关键特性已经全部开放出来:智能加速4Tops INT8 NN加速引擎,双核Vision Q6的DSP处理;支持4K60的H.265/H.264编码,支持10路1080p30的H.265/H.264解码;支持4路4Mp30机内实时硬化拼接,支持2路4K p30机内实时硬化拼接;高速接口支持USB3.0和PCIe2.0高速接口。内置智能视频分析神经网络加速引擎,高达 4Tops INT8 支持INT4/FP16 ,支持完整的API和工具链,易于开发 ,双核 Vision Q6 DSP 32K I-Cache /32K D-Cache /32K IRAM/320K DRAM,内置智能计算加速引擎,双目深度加速单元,以及矩阵计算加速单元。                                                                                                                引脚原理图AI ISP升级主要体现在,超感光降噪:信噪比提升了4倍;多光谱融合:红外补光,既有全彩又有细节;超级宽动态:动态范围扩大12dB,同时获得明亮细节和暗部细节;超级稳像:在运动条件下获得稳定画面;多维度感知:形象感知的同时进行物理量的标注。复制链接进入,了解测试IPC测试对比视频:https://cloud.tencent.com/developer/article/1973592
  • [行业资讯] 中国移动发布首个物联网智能通信领域国际标准
    本报讯 近日,中国移动智慧家庭运营中心自主研发的全球首个基于智能音箱多媒体通信需求的国际标准F.746.13,正式通过国际电信联盟(ITU)批准发布。  据介绍,中国移动智慧家庭运营中心深耕面向物联网的多媒体通信系统AloTel,首创软件通信模组赋能多形态终端、分布式流媒体传输、多人跨屏通信等技术,突破传统固话功能和形态单一的局限,将智能通信广泛赋能家庭多形态智能设备,并融合AI技术,以智能语音交互和人脸识别方式实现“解放双手”和无障碍通信,同时推出互动式多媒体通信技术,在视频通话中通过拨号键实现对智能家居的联动控制。截至目前,中国移动智慧家庭运营中心在多媒体通信领域已牵头制定3项国际标准、6项行业标准。  5G时代,通信终端从手机向TV、音箱、车、机器人等新型终端不断延伸。中国移动智慧家庭运营中心聚力5G VoNR研发,创新融合型轻载化高效EVS编码、低功耗通信模组、弱网对抗技术、交互式通信技术,全面升级通话体验。此外,还优化了EVS在物联网终端及多种网络环境下的适应能力,进一步降低通话时延,赋能多种终端。相比传统通信系统而言,用户可感知更广的全频域音源,实现时打时接,享受沉浸式沟通体验。  从一机一密智能设备安全认证,到轻量级终端威胁检测技术研发,中国移动智慧家庭运营中心基于家庭网络发挥家庭大脑核心能力,守护1.6亿家庭用户,同时赋能街道、乡村、社区、中小微企业等,为他们提供智能化、集约化的安全服务。在助力打造智慧家庭、智慧社区过程中,中国移动还利用5G、AI、物联网等新技术,实现传统社区向绿色可持续发展社区转型,在环境检测、节能节水、安全守护、疫情监测、老幼关爱等环节发挥重要作用,为加速实现“双碳”目标贡献科技力量。
  • [技术干货] OpenHarmony 3.1 Release版本关键特性解析——OpenHarmony新音视频引擎——HiStreamer
    OpenAtom OpenHarmony(以下简称“OpenHarmony”)是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。面对万物互联时代种类众多、且差异巨大的终端设备,我们为 OpenHarmony 打造了一款新的音视频引擎——HiStreamer。一、HiStreamer产生背景数字多媒体技术在过去的数十年里得到了飞速的发展,音乐、电话、电视、电影、视频会议等等,伴随着我们度过每一天。为了给用户提供丰富的多媒体处理能力,业界已经有比较成熟的音视频引擎,比如开源的音视频引擎 GStreamer。为什么我们还要打造一款新的音视频引擎呢?随着万物互联时代的到来,越来越多的智能化设备出现在我们的生活中。比如:智能冰箱可以通过屏幕和声音,告诉人们储藏的菜品快要过期了;智能闸机可以通过人脸识别,自动完成检票工作;智能门锁可以通过语音和视频,提升开锁的效率和安全性......与PC、手机等标准(Standard)设备不同,很多智能化设备的CPU处理能力比较弱、内存也比较小,传统的音视频引擎无法支持此类设备。HiStreamer 应运而生,既支持轻量级的 Mini/Small 设备,也支持 Standard 设备(目前支持部分功能)。HiStreamer 在不断发展和完善中,未来将会支持 Standard 设备的更多功能。二、“管道+插件”,实现弹性部署为了支持 Mini/Small/Standard 设备,HiStreamer 采用管道(Pipeline)和插件(plugin)的软件架构,从而可以根据设备的硬件和需求差异进行弹性部署。HiStreamer 把音视频处理的每个过程抽象成节点,上一个节点的输出,作为下一个节点的输入,把多个节点连接起来,整体形成一个管道(Pipeline),完成音视频的数据读取、解封装、解码、输出的完整流程。同时,插件可以为 Pipeline 的节点提供丰富的扩展功能,让 HiSteamer 的音视频处理能力更强大。1. Pipeline框架介绍为了让大家理解 HiStreamer 的 Pipeline 框架,下面以 MP3 音频播放为例讲解:输入是一个 MP3 文件,输出是播放出的音乐,这中间经过了很多步骤。先来看一下 MP3 文件结构:图1 MP3文件结构MP3 文件由 ID3 Metadata 容器头和若干 MP3 Frame(MP3 数据帧)构成。每个 MP3 Frame 又由 MP3 Header(MP3 头信息)和 MP3 Data 构成。这一系列的 MP3 Frame 称为 ES Data( Element Stream Data)。● ID3 Metadata:容器头,主要包括标题、艺术家、专辑、音轨数量等。● MP3 Header:包含 MP3 Sync word(标识 MP3 数据帧起始位置)和 MPEG 版本信息等。● MP3 Data:包含压缩的音频信息。播放 MP3 文件,首先需要把 MP3 文件数据读进来,然后去掉 ID3 Metadata 容器头(即解封装),再把一系列 MP3 Frame 解压缩成 PCM(Pulse-Code Modulation)数据,最后驱动喇叭发声。这个过程按顺序可以抽象成如下四个节点:图2 MP3音频播放的Pipeline1. 输入节点(MediaSourceFilter): 读取 MP3 原始数据,传给下一个节点。2. 解封装节点(DemuxerFilter): 解析 ID3 Metadata 容器头信息,作为后续节点的参数输入,并且把一帧帧 MP3 Frame(即 ES Data)传给后续的解码节点。3. 解码节点(AudioDecoderFilter): 把 ES Data 解码成 PCM 数据,传给输出节点。4. 输出节点(AudioSinkFilter): 输出 PCM 数据,驱动喇叭发声。由以上示例可知,HiStreamer 通过 Pipeline 框架把音视频处理的每个过程抽象成一个个节点。这些节点是解耦的,可以灵活拼装,从而可以根据业务需要拼装出不同的 Pipeline。同时,为了使多个节点能更好地协同工作,HiStreamer 还支持节点间的参数自动协商。2. HiStreamer插件介绍了解了 HiStreamer 的 Pipeline 框架后,我们再来看看 HiStreamer 插件。HiStreamer 的 Pipeline 框架的很多节点(比如输入节点、解封装节点、解码节点、输出节点等)都支持插件扩展。通过插件,节点的功能变得更加丰富、更加强大。插件的应用场景非常广泛,比如:● 媒体格式非常多,且以后还会有新的格式产生,可以通过插件支持新的媒体格式。● 不同 OS 平台或设备,处理方式存在差异,可以通过插件支持不同的处理方式。● 不同类型的设备,需求不同,能提供的 CPU/ROM/RAM 资源多少也不同,也可以通过插件来支持。3. 弹性部署HiStreamer 基于管道(Pipeline)和插件(plugin)的软件架构,可以根据设备的硬件和需求差异实现弹性部署。图3 HiStreamer弹性部署如图 3 所示,Mini 设备(比如音箱),它的 CPU 处理能力很弱,ROM/RAM 资源很少,需要的功能也比较少,只需要音频播放功能。HiStreamer 可以配置成只支持音频播放,并且选择轻量级的插件,配置同步解码模式,减少资源消耗。而 Small 设备,CPU 处理能力强一些,ROM/RAM 空间大一些,需要音频播放和视频播放功能。HiStreamer 可以配置成支持音视频播放,并且选择功能更强的插件。三、HiStreamer逻辑架构经过上面的介绍,我们了解了 HiStreamer 的“管道+插件”的软件架构。下面我们再来看看 HiStreamer 的详细的逻辑架构。图4 HiStreamer逻辑架构图HiStreamer 主要由 HiStreamer 引擎和 HiStreamer 插件构成。其中,HiStreamer引擎又分为以下四层:● 业务封装层:基于 Pipeline 封装实现播放器、录音机功能,简化上层应用使用。● Pipeline 框架层:提供 Pipeline 和若干个节点(输入、解封装、解码和输出)的实现,支持把多个节点连接在一起形成 Pipeline。● 插件管理层:用于插件生命周期管理,支持动态加载或静态链接两种方式使用插件。● 工具库层:提供框架依赖的工具,隔离操作系统差异,提供调测功能。HiStreamer 插件,则分为平台软件插件和厂商硬插件两类:● 平台软件插件:由 OpenHarmony 平台提供,可跨产品复用的软件算法插件。● 厂商硬插件:由厂商提供的基于硬件加速的插件,如硬件加速的编解码插件。应用开发者可以直接使用现成的插件来实现多媒体功能,节省大量的开发时间。插件越丰富,HiStreamer 的音视频处理能力会更强大。欢迎广大开发者参与 HiStreamer 插件的开发,一起来丰富 HiStreamer 插件!四、HiStreamer插件开发及实例下面就为大家介绍 HiStreamer 插件的开发过程及实例讲解,感兴趣的小伙伴们赶紧学起来,一起参与 HiStreamer 插件开发吧~1. 插件的开发HiStreamer 插件的开发主要分为插件定义和功能实现两个部分。(1)插件定义HiStreamer 插件是通过 PLUGIN_DEFINITION 宏来定义的。以输入插件 FileSource 为例,定义代码如下:std::shared_ptr<SourcePlugin> FileSourcePluginCreator(const std::string& name){ return std::make_shared<FileSourcePlugin>(name);}Status FileSourceRegister(const std::shared_ptr<Register>& reg){ SourcePluginDef definition; definition.name = "FileSource"; definition.description = "File source"; definition.rank = 100; // 100: max rank definition.protocol.emplace_back(ProtocolType::FILE); definition.creator = FileSourcePluginCreator; return reg->AddPlugin(definition);}//PLUGIN_DEFINITION传入四个参数PLUGIN_DEFINITION(FileSource, LicenseType::APACHE_V2, FileSourceRegister, [] {}); 使用 PLUGIN_DEFINITION 宏定义插件(即上面最后一行代码)时,传入了四个参数:a) 插件名称:即示例中的“FileSource”。b) License 信息:即示例中的“LicenseType::APACHE_V2”。c) 插件注册函数:即示例中的“FileSourceRegister”,该函数描述了插件基本信息,包括插件对象创建函数,并且还调用 AddPlugin 把插件注册到系统中。d) 插件反注册函数:可以传为空实现。(2)功能实现实现插件功能时,需根据要实现的插件类型,继承对应插件接口类,并实现相关接口。比如实现输入插件 FileSource,需要继承 SourcePlugin,并实现 SetSource、Read 等接口,代码如下:// 定义FileSourcePlugin类继承SourcePlugin类class FileSourcePlugin : public SourcePlugin {// 实现SetSource接口, 设置要打开的文件路径Status SetSource(std::shared_ptr<MediaSource> source) {return OpenFile(source->GetSourceUri());}// 实现Read接口,它会读取数据用于后续处理Status Read(std::shared_ptr<Buffer>& buffer, size_t expectedLen){std::fread(bufData->GetWritableAddr(expectedLen), sizeof(char), expectedLen, fp_);return Status::OK;}}FileSource插件的完整代码可参考:https://gitee.com/openharmony/multimedia_histreamer/tree/master/engine/plugin/plugins/source/file_source2. 插件的部署使用 PLUGIN_DEFINITION 定义的 HiStreamer 插件,可以是单一功能的插件,也可以是有多个功能的插件包。每个这样的插件或插件包,可以独立编译成.a或者.so,分别对应以下两种部署方式:● 静态部署:一般用在 mini 设备上,插件编译成静态库.a,链接到系统中。● 动态部署:一般用在 small/standard 设备上,插件编译成动态库.so,放到系统指定目录下,动态加载运行。3. 插件的运行插件开发完成且部署到系统之后,HiStreamer 启动时就会自动完成插件的注册。下一步,就是运行插件了。运行新实现的插件,需要先满足该插件的运行条件。比如:FileSource 只会在播放本地文件时运行;MP3 解码插件只会在播放 MP3 文件时运行......开发者可以通过日志信息,查看是否运行了自己的插件。如果有别的插件注册到系统中,导致自己的插件无法运行时,可以卸载引起干扰的插件。卸载动态部署的插件,删除对应的.so即可;卸载静态部署的插件,需要修改编译脚本取消对应插件的编译。五、结束语OpenHarmony 欢迎广大开发者一起加入 HiStreamer 插件开发,扩展自己想要的媒体功能,共同丰富 HiStreamer 媒体生态!同时,预告大家:HiStreamer 的下一个版本将为 Standard 设备增强更多功能,敬请期待!本期关于 HiStreamer 的介绍就到这里了。更多HiStreamer信息,请参考:https://gitee.com/openharmony/multimedia_histreamerhttps://gitee.com/openharmony/multimedia_histreamerhttps://gitee.com/openharmony/multimedia_histreamer转载于OpenAtom OpenHarmony微信公众号
  • [赛事资讯] 2022第八届华为软件精英挑战赛全球总决赛收官,获奖名单揭晓
    5月22日,2022第八届华为软件精英挑战赛-“普朗克计划”总决赛及颁奖典礼圆满落幕。历时两个多月的激烈角逐,3291支队伍参赛,经过八大赛区区域初赛、区域复赛等环节的层层考验,共有48支队伍、133名优秀学子成功晋级总决赛,汇聚华为深圳总部巅峰对决。最终,来自粤港澳赛区的“我们啥也不会”队一举夺魁,赢得全球总冠军,独揽20万元奖金;武长赛区的“周五快乐”队、粤港澳赛区的“量化交易研究小组”队夺得亚军,均获10万元奖金;西北赛区的“佛曰不可说”队、杭厦赛区的“土豪法称霸杭厦”队、成渝赛区的“低调就不队”、成渝赛区的“三只Monster立大功”队、上合赛区的“DataIsPower”队等5支队伍获得季军,均获得5万元奖金;粤港澳赛区的“路路的小跟班”队赢得“最优美代码”奖,获得1万元奖金。华为云全球Marketing与销售服务总裁石冀琳、华为云CTO张宇昕、华为云人力资源总裁王海杰等出席了总决赛颁奖典礼并为获奖学生颁奖。张宇昕在颁奖总结致辞中表示:通过本次大赛,我们感受到了所有同学对软件的热爱和技术的追求,也看到很多优秀队伍对代码的可读性、可靠性、安全、效率的追求,甚至有些参赛队伍与工作多年的优秀工程师能力相当。让我们看到了中国软件产业的希望,真正能实现软件技术和工程能力支撑企业和国家的未来的发展。华为坚持技术创新,不断突破技术高峰,保障极致的客户体验,唯有心怀梦想、热爱软件、敢于攀登、负重前行的人与我们一起前进,我们才能将梦想放飞。我们希望找到一群志同道合的人。此外,今年6月我们还会举办华为开发者大赛,欢迎大家关注和参与。作为业内首屈一指的软件编程竞赛平台,华为软件精英挑战赛是华为公司面向全国乃至全球在校大学生举办的大型软件编程竞赛,覆盖了国内外超过1000所高校,吸引了超10万大学生参与,其中超2000名软件精英通过大赛加入华为。在软件精英挑战赛的舞台上,同学们可以充分展示软件设计与编程的能力,享受coding解决问题的乐趣,感受软件改变世界的魅力。本届大赛总奖金池高达66万元,主办方同步“加码”华为校招机试面试绿卡以及华为云700多门高质量免费课程等丰富的资源扶持,吸引了全球21813位来自826所高校学子参赛,高校遍布中国、美国、英国、法国、德国、澳大利亚、加拿大、新加坡、芬兰、马来西亚等10多个国家。今年赛题结合华为云媒体服务面临的真实业务场景,以视频直播服务中流量调度问题为基础,在满足客户稳定、流畅的体验要求的同时,通过方案设计实现对流量的合理调度,最小化网络使用成本。意在让大学生们亲身感受云计算面临的相关问题和挑战,尽情释放软件设计与编程的创新能力,把理论知识结合企业实际业务场景进行思考,享受通过算法解决问题及创造实际价值的过程。华为云赛题组专家表示,人类获得信息,83%是通过视觉获得的;人类处理视觉信息比文本信息快6万倍。正是因为这些特点,视频得到了规模应用,预计2025年视频数据流量占全球网络流量的90%。媒体网络是由端、边和云异构算力和带宽资源构成,不同资源的时延和成本不一致,对构建极致的媒体网络提出了很高的挑战。简单点讲,媒体网络解决的问题是在保证QoS下整体成本最低。在媒体网络中,带宽成本往往大于90%,因此对带宽的计费成本的优化,就显得格外重要。本届赛题基于此背景提出,以华为云视频直播服务流量调度问题为基础,进行一定的抽象、调整和简化。面向未来,华为将依靠人才、科研和创新精神,加大投入研发创新,全力推动软件创新,持续吸引优秀人才,用技术推动世界进步。
  • [行业资讯] 京东方全媒体管控平台落地成都地铁 彰显数字经济时代下物联网行业领军水平
    近年来,以物联网、大数据、人工智能等为代表的数字经济时代飞速发展,促进大批科技成果转化。数字经济正在成为重塑全球经济结构、改变全球竞争格局的关键力量。作为全球领先的物联网创新企业,京东方不断走在行业前端。近日,其自主研发的全媒体管控平台在成都地铁实现落地应用。在数字经济时代,该平台的落地不仅有效助力更高效便捷的地铁媒体运营服务,也对西南地区全场景下的媒体运营管理具有标杆性意义。据了解,此次京东方分别为成都地铁文殊院站、桐梓林站等10余个核心站点提供软硬融合的全媒体智能化升级服务。该平台将京东方物联网技术跨界赋能地铁媒体运营领域,以“AIoT+数字媒体”为特点,融合人工智能、大数据、物联网等新一代信息技术,具备数字可视化媒体运营中心、智能化媒体内容编播、符合国家信息安全等级保护三.级标准等优势,已覆盖成都地铁1号线、6号线、8号线、18号线等4条地铁线路。京东方全媒体管控平台落地成都地铁京东方全媒体管控平台由数字化媒体运营中心、远程媒体编播系统、高性能媒体播控设备等软硬融合的物联网系统平台产品组成,为地铁媒体运营提供高效、安全、可靠的物联网解决方案。其中,数字化媒体运营中心对现有地铁媒体大屏进行物联网系统升级,实现对媒体内容远程统一的数字可视化运维。不仅支持所有主流编程语言的设备接入,助力媒体大屏等海量物联网设备快速上云,同时通过环境监测及预警系统实现了对媒体设备周边的烟雾、温度、湿度等物理环境的远程实时监测和预警,大幅提升运营安全管理能力。从需要每天线下大量人工巡检设备,升级至远程可视化自动管控,播控设备出现故障即可自动报警,有效节约了线下人员成本。远程媒体编播系统则实现了从媒体内容制作、下发到投放的一体化管理,能支持多达43种素材叠加播放及原生4K、8K超高清视频解码,是目前业界极为丰富的媒体编播平台。此外,该系统还可实现远程线上自动刊播,将媒体内容一键同步到地铁进站口、换乘空间的数字化媒体终端上,从而大大缓解了以往内容更新需要平均2小时现场人工操作的状态,极大节省了刊播成本.媒体内容投放安全同样不容忽视。面对无法实时校对地铁媒体刊播内容的难题,京东方全媒体管控平台满足了行业最高级别的信息安全等级保护三.级标准,有效构建了媒体刊播在传输、内容、流程、设备的全链路安全刊播能力。值得一提的是,通过京东方AI技术能够在发现刊播不良信息时自动采取即刻报警、自动关屏等措施,进一步保障多场景下媒体刊播信息服务安全。在数字经济时代,京东方近年来一直以“屏之物联”战略为核心持续深耕物联网创新事业,2021年物联网创新事业营收同比大幅增长,已成为公司发展新引擎。此次京东方全媒体管控平台的首次成功落地不仅为媒体运营赋能,更成为智慧创新物联网解决方案助力全场景智能化升级的行业典范。
  • [技术干货] 使用JojoGAN创建风格化的面部图
    介绍风格迁移是神经网络的一个发展领域,它是一个非常有用的功能,可以集成到社交媒体和应用程序中。几个神经网络可以根据训练数据将图像样式映射和传输到输入图像。在本文中,我们将研究 JojoGAN,以及仅使用一种参考样式来训练和生成具有该样式的任何图像的过程。JoJoGAN:One Shot Face StylizationOne Shot Face Stylization(一次性面部风格化)可用于 AI 应用程序、社交媒体过滤器、有趣的应用程序和业务用例。随着 AI 生成的图像和视频滤镜的日益普及,以及它们在社交媒体和短视频、图像中的使用,一次性面部风格化是一个有用的功能,应用程序和社交媒体公司可以将其集成到最终产品中。因此,让我们来看看用于一次性生成人脸样式的流行 GAN 架构——JojoGAN。JojoGAN 架构JojoGAN 是一种风格迁移程序,可让将人脸图像的风格迁移为另一种风格。它通过GAN将参考风格图像反转为近似的配对训练数据,根据风格化代码生成真实的人脸图像,并与参考风格图像相匹配。然后将该数据集用于微调 StyleGAN,并且可以使用新的输入图像,JojoGAN 将根据 GAN 反转(inversion)将其转换为该特定样式。JojoGAN 架构和工作流程JojoGAN 只需一种参考风格即可在很短的时间内(不到 1 分钟)进行训练,并生成高质量的风格化图像。JojoGan 的一些例子JojoGAN 生成的风格化图像的一些示例:风格化的图像可以在各种不同的输入风格上生成并且可以修改。JojoGan 代码深潜让我们看看 JojoGAN 生成风格化人像的实现。有几个预训练模型可用,它们可以在我们的风格图像上进行训练,或者可以修改模型以在几分钟内更改风格。JojoGAN 的设置和导入克隆 JojoGAN 存储库并导入必要的库。在 Google Colab 存储中创建一些文件夹,用于存储反转代码、样式图像和模型。!git clone https://github.com/mchong6/JoJoGAN.git%cd JoJoGAN!pip install tqdm gdown scikit-learn==0.22 scipy lpips dlib opencv-python wandb!wget https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip!sudo unzip ninja-linux.zip -d /usr/local/bin/import torchtorch.backends.cudnn.benchmark = Truefrom torchvision import transforms, utilsfrom util import *from PIL import Imageimport mathimport randomimport osimport numpyfrom torch import nn, autograd, optimfrom torch.nn import functionalfrom tqdm import tqdmimport wandbfrom model import *from e4e_projection import projectionfrom google.colab import filesfrom copy import deepcopyfrom pydrive.auth import GoogleAuthfrom pydrive.drive import GoogleDrivefrom google.colab import authfrom oauth2client.client import GoogleCredentials模型文件使用 Pydrive 下载模型文件。一组驱动器 ID 可用于预训练模型。这些预训练模型可用于随时随地生成风格化图像,并具有不同的准确度。之后,可以训练用户创建的模型。#Download models#optionally enable downloads with pydrive in order to authenticate and avoid drive download limits.download_with_pydrive = True  device = 'cuda' #['cuda', 'cpu']!wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2!bzip2 -dk shape_predictor_68_face_landmarks.dat.bz2!mv shape_predictor_68_face_landmarks.dat models/dlibshape_predictor_68_face_landmarks.dat%matplotlib inlinedrive_ids = {   "stylegan2-ffhq-config-f.pt": "1Yr7KuD959btpmcKGAUsbAk5rPjX2MytK",   "e4e_ffhq_encode.pt": "1o6ijA3PkcewZvwJJ73dJ0fxhndn0nnh7",   "restyle_psp_ffhq_encode.pt": "1nbxCIVw9H3YnQsoIPykNEFwWJnHVHlVd",   "arcane_caitlyn.pt": "1gOsDTiTPcENiFOrhmkkxJcTURykW1dRc",   "arcane_caitlyn_preserve_color.pt": "1cUTyjU-q98P75a8THCaO545RTwpVV-aH",   "arcane_jinx_preserve_color.pt": "1jElwHxaYPod5Itdy18izJk49K1nl4ney",   "arcane_jinx.pt": "1quQ8vPjYpUiXM4k1_KIwP4EccOefPpG_",   "arcane_multi_preserve_color.pt": "1enJgrC08NpWpx2XGBmLt1laimjpGCyfl",   "arcane_multi.pt": "15V9s09sgaw-zhKp116VHigf5FowAy43f",   "sketch_multi.pt": "1GdaeHGBGjBAFsWipTL0y-ssUiAqk8AxD",   "disney.pt": "1zbE2upakFUAx8ximYnLofFwfT8MilqJA",   "disney_preserve_color.pt": "1Bnh02DjfvN_Wm8c4JdOiNV4q9J7Z_tsi",   "jojo.pt": "13cR2xjIBj8Ga5jMO7gtxzIJj2PDsBYK4",   "jojo_preserve_color.pt": "1ZRwYLRytCEKi__eT2Zxv1IlV6BGVQ_K2",   "jojo_yasuho.pt": "1grZT3Gz1DLzFoJchAmoj3LoM9ew9ROX_",   "jojo_yasuho_preserve_color.pt": "1SKBu1h0iRNyeKBnya_3BBmLr4pkPeg_L",   "art.pt": "1a0QDEHwXQ6hE_FcYEyNMuv5r5UnRQLKT",}# from StyelGAN-NADAclass Downloader(object):   def __init__(self, use_pydrive):       self.use_pydrive = use_pydrive       if self.use_pydrive:           self.authenticate()   def authenticate(self):       auth.authenticate_user()       gauth = GoogleAuth()       gauth.credentials = GoogleCredentials.get_application_default()       self.drive = GoogleDrive(gauth)   def download_file(self, file_name):       file_dst = os.path.join('models', file_name)       file_id = drive_ids[file_name]       if not os.path.exists(file_dst):           print(f'Downloading {file_name}')           if self.use_pydrive:               downloaded = self.drive.CreateFile({'id':file_id})               downloaded.FetchMetadata(fetch_all=True)               downloaded.GetContentFile(file_dst)           else:               !gdown --id $file_id -O $file_dstdownloader = Downloader(download_with_pydrive)downloader.download_file('stylegan2-ffhq-config-f.pt')downloader.download_file('e4e_ffhq_encode.pt')加载生成器加载原始和微调生成器。设置用于调整图像大小和规范化图像的 transforms。latent_dim = 512# Load original generatororiginal_generator = Generator(1024, latent_dim, 8, 2).to(device)ckpt = torch.load('models/stylegan2-ffhq-config-f.pt', map_location=lambda storage, loc: storage)original_generator.load_state_dict(ckpt["g_ema"], strict=False)mean_latent = original_generator.mean_latent(10000)# to be finetuned generatorgenerator = deepcopy(original_generator)transform = transforms.Compose(   [       transforms.Resize((1024, 1024)),       transforms.ToTensor(),       transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),   ])输入图像设置输入图像位置。对齐和裁剪面并重新设置映射的样式。#image to the test_input directory and put the name herefilename = 'face.jpeg' #@param {type:"string"}filepath = f'test_input/{filename}'name = strip_path_extension(filepath)+'.pt'# aligns and crops facealigned_face = align_face(filepath)# my_w = restyle_projection(aligned_face, name, device, n_iters=1).unsqueeze(0)my_w = projection(aligned_face, name, device).unsqueeze(0)预训练图选择预训练好的图类型,选择不保留颜色的检查点,效果更好。plt.rcParams['figure.dpi'] = 150pretrained = 'sketch_multi' #['art', 'arcane_multi', 'sketch_multi', 'arcane_jinx', 'arcane_caitlyn', 'jojo_yasuho', 'jojo', 'disney']#Preserve color tries to preserve color of original image by limiting family of allowable transformations.if preserve_color:   ckpt = f'{pretrained}_preserve_color.pt'else:   ckpt = f'{pretrained}.pt'生成结果加载检查点和生成器并设置种子值,然后开始生成风格化图像。用于 Elon Musk 的输入图像将根据图类型进行风格化。#Generate resultsn_sample =  5#{type:"number"}seed = 3000 #{type:"number"}torch.manual_seed(seed)with torch.no_grad():   generator.eval()   z = torch.randn(n_sample, latent_dim, device=device)   original_sample = original_generator([z], truncation=0.7, truncation_latent=mean_latent)   sample = generator([z], truncation=0.7, truncation_latent=mean_latent)   original_my_sample = original_generator(my_w, input_is_latent=True)   my_sample = generator(my_w, input_is_latent=True)# display reference imagesif pretrained == 'arcane_multi':   style_path = f'style_images_aligned/arcane_jinx.png'elif pretrained == 'sketch_multi':   style_path = f'style_images_aligned/sketch.png'else:      style_path = f'style_images_aligned/{pretrained}.png'style_image = transform(Image.open(style_path)).unsqueeze(0).to(device)face = transform(aligned_face).unsqueeze(0).to(device)my_output = torch.cat([style_image, face, my_sample], 0)生成的结果结果生成为预先训练的类型“Jojo”,看起来相当准确。现在让我们看一下在自创样式上训练 GAN。使用你的风格图像进行训练选择一些面部图,甚至创建一些自己的面部图并加载这些图像以训练 GAN,并设置路径。裁剪和对齐人脸并执行 GAN 反转。names = ['1.jpg', '2.jpg', '3.jpg']targets = []latents = []for name in names:   style_path = os.path.join('style_images', name)   assert os.path.exists(style_path), f"{style_path} does not exist!"   name = strip_path_extension(name)   # crop and align the face   style_aligned_path = os.path.join('style_images_aligned', f'{name}.png')   if not os.path.exists(style_aligned_path):       style_aligned = align_face(style_path)       style_aligned.save(style_aligned_path)   else:       style_aligned = Image.open(style_aligned_path).convert('RGB')   # GAN invert   style_code_path = os.path.join('inversion_codes', f'{name}.pt')   if not os.path.exists(style_code_path):       latent = projection(style_aligned, style_code_path, device)   else:       latent = torch.load(style_code_path)['latent']   latents.append(latent.to(device))targets = torch.stack(targets, 0)latents = torch.stack(latents, 0)微调 StyleGAN通过调整 alpha、颜色保留和设置迭代次数来微调 StyleGAN。加载感知损失的鉴别器并重置生成器。#Finetune StyleGAN#alpha controls the strength of the stylealpha =  1.0 # min:0, max:1, step:0.1alpha = 1-alpha#preserve color of original image by limiting family of allowable transformationspreserve_color = False #Number of finetuning steps.num_iter = 300#Log training on wandb and interval for image logginguse_wandb = False log_interval = 50if use_wandb:   wandb.init(project="JoJoGAN")   config = wandb.config   config.num_iter = num_iter   config.preserve_color = preserve_color   wandb.log(   {"Style reference": [wandb.Image(transforms.ToPILImage()(target_im))]},   step=0)# load discriminator for perceptual lossdiscriminator = Discriminator(1024, 2).eval().to(device)ckpt = torch.load('models/stylegan2-ffhq-config-f.pt', map_location=lambda storage, loc: storage)discriminator.load_state_dict(ckpt["d"], strict=False)# reset generatordel generatorgenerator = deepcopy(original_generator)g_optim = optim.Adam(generator.parameters(), lr=2e-3, betas=(0, 0.99))训练生成器从潜在空间生成图像,并优化损失。if preserve_color:   id_swap = [9,11,15,16,17]z = range(numiter)for idx in tqdm( z):   mean_w = generator.get_latent(torch.randn([latents.size(0), latent_dim]).to(device)).unsqueeze(1).repeat(1, generator.n_latent, 1)   in_latent = latents.clone()   in_latent[:, id_swap] = alpha*latents[:, id_swap] + (1-alpha*mean_w[:, id_swap]   img = generator(in_latent, input_is_latent=True)   with torch.no_grad():       real_feat = discriminator(targets)       fake_feat = discriminator(img)   loss = sum([functional.l1_loss(a, b) for a, b in zip(fake_feat, real_feat)])/len(fake_feat)         if use_wandb:       wandb.log({"loss": loss}, step=idx)       if idx % log_interval == 0:           generator.eval()           my_sample = generator(my_w, input_is_latent=True)           generator.train()           wandb.log(           {"Current stylization": [wandb.Image(my_sample)]},           step=idx)   g_optim.zero_grad()   loss.backward()   g_optim.step()使用 JojoGAN 生成结果现在生成结果。下面已经为原始图像和示例图像生成了结果以进行比较。#Generate resultsn_sample =  5seed = 3000torch.manual_seed(seed)with torch.no_grad():   generator.eval()   z = torch.randn(n_sample, latent_dim, device=device)   original_sample = original_generator([z], truncation=0.7, truncation_latent=mean_latent)   sample = generator([z], truncation=0.7, truncation_latent=mean_latent)   original_my_sample = original_generator(my_w, input_is_latent=True)   my_sample = generator(my_w, input_is_latent=True)# display reference imagesstyle_images = []for name in names:   style_path = f'style_images_aligned/{strip_path_extension(name)}.png'   style_image = transform(Image.open(style_path))   style_images.append(style_image)face = transform(aligned_face).to(device).unsqueeze(0)style_images = torch.stack(style_images, 0).to(device)my_output = torch.cat([face, my_sample], 0)output = torch.cat([original_sample, sample], 0)生成的结果现在,你可以使用 JojoGAN 生成你自己风格的图像。结果令人印象深刻,但可以通过调整训练方法和训练图像中的更多特征来进一步改进。结论JojoGAN 能够以快速有效的方式准确地映射和迁移用户定义的样式。关键要点是:· JojoGAN 可以只用一种风格进行训练,以轻松映射并创建任何面部的风格化图· JojoGAN 非常快速有效,可以在不到一分钟的时间内完成训练· 结果非常准确,类似于逼真的肖像· JojoGAN 可以轻松微调和修改,使其适用于 AI 应用程序因此,无论风格类型、形状和颜色如何,JojoGAN 都是用于风格转移的理想神经网络,因此可以成为各种社交媒体应用程序和 AI 应用程序中非常有用的功能。       原文标题 : 使用JojoGAN创建风格化的面部图
  • [技术干货] UAP组网介绍
    一、  产品介绍应接入与媒体发展趋势,华为技术有限公司研制了接入和媒体资源一体化的软件通用接入平台UAP9600(历史上UAP产品还有UAP8100、UAP6600等)。作为UAP产品的三大子offering之一,定位如下:1) 支持宽带接入业务应用,支持同时接入NGN、IMS网络。2) 作为纯软化UAP,支持基于通用硬件、虚拟化平台部署;支持集群部署提供大容量解决方案。支撑解决方案构建纯软件化、虚拟化、云化竞争力。 二、  UAP9600系统组成UAP9600系统,可基于Linux操作系统,运行于虚拟机、物理机之上;整个系统由网关控制系统、媒体处理系统、维护管理系统组成。网关控制系统:MGC子系统,主要负责信令接入,座席注册管理,license控制、资源管理,与CTI、AS交互,呼叫控制,资源操作控制。媒体处理系统:MRP子系统,主要支持媒体资源功能,资源操作控制、媒体网关功能。维护管理系统:OM子系统,主要负责程序部署,数据配置,告警,话统,操作维护管理三、  UAP整体组网UAP9600 IPCC组网示例四、  软件结构UAP9600的软件系统由主机软件、NMU软件和客户端软件三部分组成。主机软件主要实现信令与协议适配、呼叫处理、业务控制、媒体资源管理、媒体资源处理等功能。NMU软件作为OAM的服务端,配合主机软件响应客户端软件的操作指令完成OAM功能。客户端软件向用户提供图形化管理界面,支持本地登录和远程访问,进行数据维护、设备管理、告警管理、话务统计和呼叫与信令跟踪等维护操作.
  • [问题求助] 【ICD产品】【媒体话单分析】mysql媒体话单表数据问题
    【问题来源】    荣耀项目   【问题简要】文档名称:ICD 产品文档 V300R006C90U3SPC700话单说明.docmysql媒体话单表数据问题【问题类别】 话单【AICC解决方案版本】【期望解决时间】明早【问题现象描述】         基于上述产品文档,在使用该产品时,存在一下问题,方便能否进行确认下:1,媒体呼叫话单表中,有很多电话记录的数据都会存在两条一模一样的重复数据(其他业务表中也是)。而且电话记录中,很多无device-type等于队列和ivr的记录;2,媒体呼叫话单表中,callidnum = -1 的记录中,realeaseCause值在文档中很多找不着说明含义;3,媒体呼叫话单表中,如果判断该通电话有没有进行过转接、三方、保持等操作。4,坐席操作详单中,表字段和文档中的字段均不相同。
总条数:193 到第
上滑加载中