10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

如何自动搞定全站图片的 alt 属性?

  • 2019-03-12
  • 本文字数:2935 字

    阅读完需:约 10 分钟

如何自动搞定全站图片的alt属性?

Web 开发人员和内容编辑人员经常会忘记或忽略了 img 标签的 alt 属性,这是一个可以提升网站可访问性和 SEO 性能的重要部分,这个属性通常用来描述图片:


​​​<img src="/cute/sloth/image.jpg" alt="A brown baby sloth staring straight into the camera with a tongue sticking out." >
复制代码


如果你经常在网络上发布内容,你就应该知道,为图片提供描述性文本是一件很枯燥的事情。当然,如果只有几张图片倒没什么问题,但如果我们说的是数百或数千张图片呢?你该怎么办?


让我们来看看使用谷歌、IBM 和微软等公司提供的计算机视觉和图像识别服务自动为图片生成描述性文本的一些可能性。

alt 属性的文本有什么用?

alt 属性是一小段 HTML 代码,用于描述页面上显示的图片,但在 Web 开发和编辑内容时经常被忽略。它是如此的不起眼,以至于它似乎对普通用户没有任何影响,但它确实具有非常重要的用途:


  • 屏幕阅读器的 Web 可访问性:假设我们有一个包含大量图片的页面,但没有一张图片包含了 alt 属性文本。使用屏幕阅读器进行冲浪的用户只能听到“image”这个词,这对他们来说这不是很有用。他们只知道这是一张图片,除此之外没有其他任何信息。如果有了 alt 属性文本,屏幕阅读器就可以帮助视障人士“看到”图片里有什么,以便更好地理解页面的内容。有人说一张图片胜过千言万语,但如果没有 alt 属性文本,这些用户就错失了这些千言万语。

  • 如果无法加载图片,就显示文本:Web 似乎是绝对可靠的,就像纽约一样,从来不需要睡觉,但错误的连接确实是存在的,如果发生这种情况,图片往往无法被正确加载,并且出现“损坏”。alt 文本是一种安全措施,它会显示在页面上出现“损坏”图像的位置,为用户提供后备内容。

  • SEO 性能:图片的 alt 文本也有助于提升 SEO 性能。虽然它并不能让网页的搜索排名更靠前,但它也是提升 SEO 性能的一个考虑因素。


在了解了这些重要性之后,希望你能够在开发和内容编辑期间加入正确的 alt 文本。但是,试图为大量积压的图像进行详细描述可能是一项艰巨的任务,特别是如果你的时间很紧迫或者奔忙于多个项目之间。


如果有一种方法可以在上传图片时应用 alt 文本该有多好!如果有办法检查页面是否缺少 alt 属性,并自动填充它们,那该有多好!

解决方案来了!

计算机视觉(或图像识别)实际上已经出现了相当长一段时间。谷歌、IBM 和微软等公司都提供了自己的公开 API,开发人员可以利用这些功能来识别图像以及图像中的内容。


有些开发人员已经在使用这些服务,并创建了自己的插件来生成 alt 文本。以 Sarah Drasner 的生成器为例,它演示了如何使用 Azure 的计算机视觉 API 为上传的图片或 URL 链接的图片创建 alt 文本。


Jacob Peattie 开发了一个自动 alt 文本插件,这也是一个使用了 Azure 计算机视觉 API 的 WordPress 插件。它基本上是工作流的一个补充,允许用户上传图片并自动生成 alt 文本。

人工智能的介入

我曾经尝试过一些人工智能服务,我敢说,Azure 计算机视觉生成的结果是最好的。谷歌和 IBM 提供的服务肯定也有他们的专长,它们仍然可以识别出图像并得到正确的结果,但微软的服务非常好,非常准确,以至于我认为没有必要再去考虑其他选项。


创建图像识别插件非常简单。首先,访问微软Azure Computer Vision。你需要登录或创建帐户,这样才能获取插件所需的 API 密钥。


进入仪表盘后,搜索并选择“Computer Vision”,然后填写必要的信息。



等待平台启动一个计算机视觉实例,在实例启动后就可以使用 API 密钥。



现在开始进入有趣的部分!出于演示的目的,我将使用普通的 JavaScript 代码。对于其他语言,你可以查看文档


你可以直接复制和粘贴下面的代码,只需要替换占位符就可以了。


var request = new XMLHttpRequest();request.open('POST', 'https://[LOCATION]/vision/v1.0/describe?maxCandidates=1&language=en', true);request.setRequestHeader('Content-Type', 'application/json');request.setRequestHeader('Ocp-Apim-Subscription-Key', '[SUBSCRIPTION_KEY]');request.send(JSON.stringify({ "url": "[IMAGE_URL]" }));request.onload = function () {    var resp = request.responseText;    if (request.status >= 200 && request.status < 400) {        // Success!        console.log('Success!');    } else {        // We reached our target server, but it returned an error        console.error('Error!');    }    console.log(JSON.parse(resp));};
request.onerror = function (e) { console.log(e);};
复制代码


好吧,让我们来看看 AI 服务的一些关键术语。


位置:这是在获取订阅密钥之前选择的服务的订阅位置。如果由于某种原因忘记了位置,可以转到“Overview”页面,并在“Endpoint”下找到它。



订阅密钥:这是为插件解锁服务的密钥,可以在“Keys”页面中获得。其中有两个,但使用哪一个并不重要。


图片 URL:这是需要获取 alt 文本的图片的路径。请注意,发送给 API 的图片必须满足特定的要求:


  • 文件类型必须是 JPEG、PNG、GIF、BMP;

  • 文件大小必须小于 4MB;

  • 尺寸应该大于 50×50 像素。

易如反掌

感谢这些大公司为开发人员开放他们的服务和 API,现在任何人都可以相对轻松地使用计算机视觉。作为一个简单的演示,我将下面的图片上传给 Azure Computer Vision API。



这个服务返回以下这些详细信息:


{    "description": {        "tags": [            "person",            "holding",            "cellphone",            "phone",            "hand",            "screen",            "looking",            "camera",            "small",            "held",            "someone",            "man",            "using",            "orange",            "display",            "blue"        ],        "captions": [            {                "text": "a hand holding a cellphone",                "confidence": 0.9583763512737793            }        ]    },    "requestId": "31084ce4-94fe-4776-bb31-448d9b83c730",    "metadata": {        "width": 920,        "height": 613,        "format": "Jpeg"    }}
复制代码


你可以从中选择可能用于图片的 alt 文本。如何构建这个功能取决于你:


  • 你可以创建一个 CMS 插件,并将其添加到内容工作流中,当上载图片并将其保存到 CMS 中时,会生成图像的 alt 文本。

  • 你可以开发一个 JavaScript 插件,如果加载的图片缺少 alt 文,可以即时添加 alt 文本。

  • 你可以创建一个浏览器扩展程序,当它发现网页中的图片缺少 alt 文本时,会自动为它们添加 alt 文本。

  • 你可以编写代码来搜索现有数据库或内容存储库,找出缺失的 alt 文本,并更新它们,或创建拉取请求做出相应的更改。


请注意,这些服务并非 100%准确。它们有时候会返回低置信度和与主题完全不一致的描述。但是,这些平台也在不断学习和改进。毕竟,罗马不是一天建成的。


英文原文:https://css-tricks.com/using-artificial-intelligence-to-generate-alt-text-on-images/


更多内容,请关注前端之巅。



会议推荐


2019 年 6 月,GMTC 全球大前端技术大会 2019 即将到来。小程序、Flutter、移动 AI、工程化、性能优化…大前端的下一站在哪里?点击下图了解更多详情。



2019-03-12 09:535243
用户头像

发布了 731 篇内容, 共 475.1 次阅读, 收获喜欢 2008 次。

关注

评论 1 条评论

发布
用户头像
2019-03-14 09:44
回复
没有更多了
发现更多内容

python 技术面试没过,居然是没有用 pytest 测试框架

和牛

Python 测试 测试框架 pytest

年底了,你的数据库密码安全吗

Simon

MySQL 数据库

28天写作挑战——坚持28天,每天500字

TGO鲲鹏会

28天写作 热门活动

Filebeat同步写位点文件引发的磁盘IO问题

秦宝齐

换个角度,聊聊全链路压测

老张

性能测试 系统稳定性 全链路压测

软件测试---BUG的生命周期

测试人生路

软件测试

惊艳!阿里人用29篇讲明白了多线程与高并发+设计模式,惊呆了!

996小迁

Java 面试 设计模式 多线程 高并发

大数据应用及其价值

Andy

VoltDB成功入选CNCF Landscape云原生数据库全景图

VoltDB

云原生 cncf VoltDB 分布式内存数据库

Java多线程并发控制工具信号量Semaphore,实现原理及案例

李尚智

Java Java并发 并发编程 后端

使用PG_SHOW_PLANS监控PostgreSQL执行计划

PostgreSQLChina

数据库 postgresql 开源

如何在 OpenShift 中运行 Collabora Office

东风微鸣

openshift

看完老板哭着让我留下来!带你彻底搞懂Android启动速度优化!Android篇

欢喜学安卓

android 程序员 面试 移动开发

大数据指标分析思考

Andy

深入分析单例设计模式

Andy

自学编程的4大误区,你中招了吗?

田维常

程序员

MySQL不会丢失数据的秘密,就藏在它的 7种日志里

程序员小富

MySQL

云算力挖矿系统APP开发|云算力挖矿软件开发

系统开发

泪目!美团点评APP在移动网络性能优化的实践,附赠课程+题库

欢喜学安卓

android 程序员 面试 移动开发

Uniswap去中心化交易所系统开发

W13902449729

去中心化交易所系统开发 uniswap

Java多线程并发控制工具CountDownLatch,实现原理及案例

李尚智

Java 并发编程 后端

零基础也能看得懂!Android面试心得必备技能储备详解,Android面试题及解析

欢喜学安卓

android 程序员 面试 移动开发

算法学习手册

田维常

算法

腾讯高工亲授“MySQL学习方法”【思维导图+学习笔记+实战文档+面试题库】让你站在数据库领域的顶峰 笑傲江湖!

比伯

Java 编程 架构 面试 计算机

架构师第7周作业

Geek_xq

吴桐/数字化的下一个十年,你可能不会更幸福

CECBC

数字化时代

加密数字货币钱包系统软件开发|加密数字货币钱包APP开发

系统开发

HTTP 请求流程

coolion

大前端 浏览器 HTTP

测开之函数进阶· 第8篇《多个装饰器装饰同一个函数,三个内置的装饰器》

清菡软件测试

测试开发

再见 2020!Apache RocketMQ 发布 4.8.0,DLedger 模式全面提升!

阿里巴巴云原生

阿里云 开发者 云原生 存储 消息中间件

AMD台式CPU市场份额距离英特尔还有多远?刚到四分之一

E科讯

如何自动搞定全站图片的alt属性?_大前端_Nino Ross Rodriguez_InfoQ精选文章