前言

一个网站通常有许多地方会用到同一张图,但是比例又不一样.

一般的做法就是用 CSS 的 cover 和 contain 来处理.

由于 cover 只会保留中间信息, 所以很多时候需要人工裁剪.

于是就有了智能裁剪的需求了.

Azure Computer Vision

参考:

官网示范

价格

价格还可以

Azure SDK for .NET

Sample code

实现步骤

1. 到 Azure portal 创建 Computer Vision

没有什么特别的, 默认就可以了 (注: 一个 account 只能有一个 free 的 Computer Vision 哦)

2. 进入 Computer Vision Resource > Keys and Endpoint 把 key 和 endpoint 抄起来

3. 安装 SDK

dotnet add package Microsoft.Azure.CognitiveServices.Vision.ComputerVision

2 个核心功能, 第 1 个是获取全图焦点, 第 2 个是给定要求智能裁剪

[HttpPost("SmartCrop")]
public async Task<ActionResult> SmartCropAsync()
{
var subscriptionKey = "key";
var endpoint = "https://jbreviews-cv.cognitiveservices.azure.com/";
var client = new ComputerVisionClient(new ApiKeyServiceClientCredentials(subscriptionKey))
{
Endpoint = endpoint
};
var imageFileFullPath = @"WebApi\Controller\Test\SmartCrop\10.png";
using var imageStream = new FileStream(imageFileFullPath, FileMode.Open);
// get area of interest
var areaOfInterestResult = await client.GetAreaOfInterestInStreamAsync(imageStream); // 这里返回之后 imageStream 就自动被 close 了
using var image = Image.Load(imageFileFullPath);
var croppedImage = image.Clone(imageProcessing =>
{
imageProcessing.Crop(new Rectangle(
x: areaOfInterestResult.AreaOfInterest.X,
y: areaOfInterestResult.AreaOfInterest.Y,
width: areaOfInterestResult.AreaOfInterest.W,
height: areaOfInterestResult.AreaOfInterest.H)
);
});
croppedImage.SaveAsJpeg(
@"WebApi\Controller\Test\SmartCrop\11.png", new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder
{
Quality = 85
}
); // get smart crop image
using var imageStream2 = new FileStream(imageFileFullPath, FileMode.Open);
var croppedImageStream = await client.GenerateThumbnailInStreamAsync(300, 100, imageStream2, smartCropping: true);
using var imageFileStream = System.IO.File.Create(@"WebApi\Controller\Test\SmartCrop\12.png");
croppedImageStream.CopyTo(imageFileStream);
return Ok();
}

缺陷

GetAreaOfInterest 可以获取到一张图的焦点, 这个焦点并不是指人脸, 它只是去掉背景,保留主题而已.

比如这张杨幂图, 焦点就是中间的部分

结果:

如果再拿这张图去找焦点, 返回的结果是一样的, 并不会返回杨幂的脸, 所以它并不会一只往下找焦点中的焦点.

使用 GenerateThumbnail 可以指定一个 width 和 height. 它会通过找到 interest 之后再调整 zoom 然后 crop.

如果需求是 100x100 那么结果依然是上面这张焦点图, 只是被压缩到 100x100 而已. 它会尽可能保留焦点的全部信息.

如果限制是 400x100 那么它就没办法调整 zoom 了. 这个时候它只能取舍掉焦点图的信息. 类似 css cover 的做法.

而由于它没有办法识别出焦点的焦点, 所以它只能从中心点开始, 结果就和 css cover 一模一样的效果了

由人处理的话应该是这样的:

所以它并不能没有想象中的智能.

Azure Computer Vision 之 Smart Crop 智能裁剪图片的更多相关文章

  1. 如何创建Azure Face API和计算机视觉Computer Vision API

    在人工智能技术飞速发展的当前,利用技术手段实现人脸识别.图片识别已经不是什么难事.目前,百度.微软等云计算厂商均推出了人脸识别和计算机视觉的API,其优势在于不需要搭建本地环境,只需要通过网络交互,就 ...

  2. Computer Vision Tutorials from Conferences (3) -- CVPR

    CVPR 2013 (http://www.pamitc.org/cvpr13/tutorials.php) Foundations of Spatial SpectroscopyJames Cogg ...

  3. Computer Vision: Algorithms and ApplicationsのImage processing

    实在是太喜欢Richard Szeliski的这本书了.每一章节(after chapter3)都详述了该研究方向比較新的成果.还有很多很多的reference,假设你感兴趣.全然能够看那些參考论文 ...

  4. AI-Azure上的认知服务之Computer Vision(计算机视觉)

    使用 Azure 的计算机视觉服务,开发人员可以访问用于处理图像并返回信息的高级算法. 主要包含如下高级算法: 标记视觉特性Tag visual features 检测对象Detect objects ...

  5. paper 156:专家主页汇总-计算机视觉-computer vision

    持续更新ing~ all *.files come from the author:http://www.cnblogs.com/findumars/p/5009003.html 1 牛人Homepa ...

  6. Computer vision labs

    积累记录一些视觉实验室,方便查找 1.  多伦多大学计算机科学系 2.  普林斯顿大学计算机视觉和机器人实验室 3.  牛津大学Torr Vision Group 4.  伯克利视觉和学习中心 Pro ...

  7. Computer Vision: OpenCV, Feature Tracking, and Beyond--From <<Make Things See>> by Greg

    In the 1960s, the legendary Stanford artificial intelligence pioneer, John McCarthy, famously gave a ...

  8. [转载]Three Trending Computer Vision Research Areas, 从CVPR看接下来几年的CV的发展趋势

    As I walked through the large poster-filled hall at CVPR 2013, I asked myself, “Quo vadis Computer V ...

  9. (转) WTF is computer vision?

        WTF is computer vision? Posted Nov 13, 2016 by Devin Coldewey, Contributor   Next Story   Someon ...

  10. Computer Vision 学习 -- 图像存储格式

    本文把自己理解的图像存储格式总结一下. 计算机中的数据,都是二进制的,所以图片也不例外. 这是opencv文档的描述,具体在代码里面,使用矩阵来进行存储. 类似下图是(BGR格式): 图片的最小单位是 ...

随机推荐

  1. socket通讯原理及例程(一看就懂

    来源:https://blog.csdn.net/jiushimanya/article/details/82684525 里面有疑问或者不正确的地方可以给我留言 对TCP/IP.UDP.Socket ...

  2. django python 循环一个月的每一天

    from datetime import datetime, timedelta def get_dates_in_month(year, month): start_date = datetime( ...

  3. PyQt 右键菜单的实现(Qt.CustomContextMenu方式)

    从Qt文档Qt::ContextMenuPolicy的值可以看出,实现右键菜单的方式有三种,这对于所有继承于QWidget的类都是通用的,在用每一种方式实现之前都要调用QWidget::setCont ...

  4. Jmeter二次开发函数之入门

    背景:Jmeter不能满足我们的参数需求,如生成手机号码.身份证号码等业务,固对jmeter进行二次函数开发. jmeter提供了接口供用户进行二次开发,我们只需引入包进行编辑.从jmeter规范上, ...

  5. 使用Git bash切换Gitee、GitHub多个Git账号

    使用Git bash切换Gitee.GitHub多个Git账号 ​ Git是分布式代码管理工具,使用命令行的方式提交commit.revert回滚代码.这里介绍使用Git bash软件来切换Gitee ...

  6. 【Vue2】Axios、Async+Await、解构赋值

    Axios入门使用,Async和Await用法,解构赋值语法 <!DOCTYPE html> <html lang="en"> <head> & ...

  7. 【Vue】Re22 Axios

    Axios[AJAX I\O System] 创建案例项目并且安装Axios npm install axios --save 接口测试网址: http://httpbin.org/ 案例提供的数据地 ...

  8. 【转载】 Tensorflow如何直接使用预训练模型(vgg16为例)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/weixin_44633882/artic ...

  9. Ubuntu18.04系统下 临时使用 socks5代理apt-get的方法

    参考: https://www.cnblogs.com/iwetuan/p/13567810.html ------------------------------------------------ ...

  10. batch_norm在强化学习中建议使用的形式

    def batch_norm(layer, **kwargs): """ Apply batch normalization to an existing layer. ...