引言
在当今大厂级别的编程中,不仅要求功能强大,还需要展现出高超的逻辑能力和深入的语言理解。本文将介绍如何结合前端编程技巧和人工智能(AI)应用,实现图片检测功能。
编程效率的追求
大厂程序员们始终追求编程效率的提升。在HTML编程中,使用EMMET(HTML代码快速输入工具)可以极大地提高编程效率。此外,通过刻意练习,我们能够培养快速编程的能力,从而更高效地完成任务。
前端素养的重要性
前端素养是成为优秀程序员的关键。构建语义化的HTML结构是前端开发的基础之一。不同的HTML标签代表着不同的语义,例如使用<main>
标签比使用<div>
更能表达页面的主体内容。同时,熟悉CSS选择器的使用,能够更精准地定位和样式化HTML元素,提高页面的美观程度和用户体验。
NLP任务之图片检测
本文以NLP(自然语言处理)任务中的图片检测为例,展示了如何将前端编程技巧与AI应用相结合,实现图片检测的功能。以下是相关代码:
xml
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>nlp之图片识别,两种语言</title>
<style>
.container {
margin: 40px auto;
width: max(50vw, 400px);
display: flex;
flex-direction: column;
align-items: center;
}
.custom-file-upload {
display: flex;
align-items: center;
cursor: pointer;
gap:10px;
border: 2px solid black;
padding: 8px 16px;
border-radius: 6px;
}
#file-upload {
display: none;
}
#image-container {
width: 100%;
margin-top:20px;
position: relative;
}
#image-container>img {
width: 100%;
}
.bounding-box {
position: absolute;
box-sizing: border-box;
}
.bounding-box-label {
position: absolute;
color: white;
font-size: 12px;
}
</style>
</head>
<body>
<!-- 语义化 main就比div 更好 页面中的主体内容 -->
<!-- css 选择器 -->
<main class="container">
<label for="file-upload" class="custom-file-upload">
<!-- <input type="file" id="file-upload" accept="image/*"> -->
<input type="file" accept="image/*" id="file-upload">
上传图片
</label>
<div id="image-container">
</div>
<p id="status"></p>
</main>
<script type="module">
// transformers npl 任务
import { pipeline, env } from "https://cdn.jsdelivr.net/npm/@xenova/transformers@2.6.0"
env.allowLocalModels = false;
const fileUpload = document.getElementById('file-upload');
const imageContainer = document.getElementById('image-container');
fileUpload.addEventListener('change', function (e1) {
console.log(e1.target.files[0]);
const file = e1.target.files[0];
//新建一个FileReader 对象,01 序列
//图片比较大
const reader = new FileReader();
reader.onload = function (e2) {
//加载完成
const image = document.createElement('img'); //图片对象
image.src = e2.target.result;
console.log(image.src);
imageContainer.appendChild(image);
detect(image);//启动ai任务 功能模块化,封装出去
}
reader.readAsDataURL(file);
})
const status = document.getElementById('status');
// 检测图片的AI任务
const detect = async (image) => {
status.textContent = "分析中..."
const detector = await pipeline("object-detection",
"Xenova/detr-resnet-50");//model 实例化了detector对象
const output = await detector(image.src, {
threshold: 0.1,
percentage: true
})
console.log(output);
output.forEach(renderBox)
}
function renderBox({ box, label }) {
const { xmax, xmin, ymax, ymin } = box;
const boxElement = document.createElement("div");
boxElement.className = "bounding-box";
Object.assign(boxElement.style, {
borderColor: '#123123',
borderWidth: '1px',
borderStyle: 'solid',
left: 100 * xmin + '%',
top: 100 * ymin + '%',
width: 100 * (xmax - xmin) + "%",
height: 100 * (ymax - ymin) + "%"
})
const labelElement = document.createElement('span');
labelElement.textContent = label;
labelElement.className = "bounding-box-label";
labelElement.style.backgroundColor = '#000000';
boxElement.appendChild(labelElement);
imageContainer.appendChild(boxElement);
}
</script>
</body>
</html>
在代码中,我们通过HTML和CSS构建了一个简单的页面,用户可以上传图片。一旦用户上传了图片,JavaScript代码将调用AI模型对图片进行检测,并在页面上显示检测结果。这个过程中,运用了前文提到的HTML语义化、CSS选择器等前端技巧,以及异步编程、事件监听等JavaScript技术。
效果图
结语
通过本文的学习,我们了解了如何结合前端编程技巧和AI应用,实现图片检测的功能。这不仅提升了我们的编程技能,也拓展了我们对前端和AI领域的理解。希望读者通过本文的学习,能够在实践中运用所学知识,不断提升自己的编程能力。