OpenCV图像处理与识别AIWROK软件十大功能及其实现方法
<table cellspacing="0" cellpadding="0" style="table-layout: fixed; width: 979px; font-size: 12px;"><tbody><tr><td class="t_f" id="postmessage_338" style="font-size: 14px; line-height: 24px;">OpenCV图像处理与识别AIWROK软件十大功能及其实现方法..<br><br><br><div class="blockcode" style="overflow: hidden; padding-right: 0px; padding-bottom: 5px; padding-left: 10px; background-image: linear-gradient(90deg, rgb(237, 237, 237), rgb(237, 237, 237)); background-size: 43px; color: rgb(102, 102, 102); zoom: 1;"><div id="code_c07"><ol style="margin-left: 10px !important;"><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">//第一个,opencv.checkColorsEx_精简OCR识别<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">function safeOCRProcess() {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> // 第一步:先验证目标区域是否存在<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> if (!opencv.checkColorsEx('多点比色.cv')) {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("基础区域验证未通过");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> return;<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> }<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> // 第二步:执行OCR并验证返回类型<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> var ocrResult = opencv.OCREx('多点比色.cv');<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> <br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> // 双重类型验证(应对可能返回boolean的情况)<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> if (!ocrResult || typeof ocrResult !== 'object' || typeof ocrResult.findIncludeText !== 'function') {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("OCR结果异常");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> return;<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> }<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> // 第三步:安全处理识别结果<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> try {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> var resultText = ocrResult.findIncludeText('蜂');<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> if (resultText) {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("识别成功:" + resultText);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> // 这里可以添加点击等后续操作<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> } else {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("文本未找到");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> }<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> } catch (e) {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("结果处理异常:" + e.message);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> }<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">}<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">// 执行处理流程<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">safeOCRProcess();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">//第二个,opencv.checkColorsEx_精简区域找图<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var seek = opencv.findImagesEx('区域找图.cv');<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">if (seek) {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> seek.click(); //点击<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">} else {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("未找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">}<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var seek = opencv.findImagesEx('区域找图.cv');<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">if (seek) {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> var place = seek.getRealRect();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> var x = place.getCenterX();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> var y = place.getCenterY();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl(x+","+y)<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">} else {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("未找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">}<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">//第三个,opencv.checkColorsEx_精简多点找色<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var seek = opencv.checkColorsEx('多点比色.cv');<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">if (seek) {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">} else {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("未找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">}<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">if (opencv.checkColorsEx('多点比色.cv')) {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">} else {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("未找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">}<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">//第四个,opencv.checkColorsEx_精简多点比色<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var seek = opencv.checkColorsEx('多点比色.cv');<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">if (seek) {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">} else {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("未找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">}<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">if (opencv.checkColorsEx('多点比色.cv')) {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">} else {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("未找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">}<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">//第五个,opencv.checkColors_OCR识别<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var mat=screen.screenShot(720,1280,100).getMat();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var seek = opencv.OCR(mat, '小猪猪.ocr', 0.95,0);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">if (seek) {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl(ocr1.getAllString());<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">} else {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("未找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">}<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var mat=screen.screenShot(720,1280,100).getMat();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var seek = opencv.OCR(mat, '小猪猪.ocr', 0.95,0);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">if (seek) {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl(seek.findIncludeText('小猪猪'))<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">} else {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("未找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">}<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">//第六个,opencv.checkColors_多点比色<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var mat=screen.screenShot(720,1280,100).getMat();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var seek = opencv.checkColors(mat, ['351,452,#553E38', '368,449,#816D78'], 2, 4, 0.95);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">if (seek) {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">} else {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("未找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">}<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var mat=screen.screenShot(720,1280,100).getMat();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">if (opencv.checkColors(mat, ['351,452,#553E38', '368,449,#816D78'], 2, 4, 0.95)) {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">} else {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("未找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">}<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">//第七个,opencv.findMultiColor_多点找色<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var mat=screen.screenShot(720,1280,100).getMat();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var seek = opencv.findMultiColor(mat,'607,425,#264878',['601,413,#1E4276','597,428,#1E4276','591,429,#F8FBFF'],2,5,,0.95);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">if (seek) {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> seek.click(); //点击<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">} else {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("未找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">}<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var mat=screen.screenShot(720,1280,100).getMat();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var seek = opencv.findMultiColor(mat,'607,425,#264878',['601,413,#1E4276','597,428,#1E4276','591,429,#F8FBFF'],2,5,,0.95);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">if (seek) {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> var place = seek.getRealRect();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> var x = place.getCenterX();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> var y = place.getCenterY();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl(x+","+y)<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">} else {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("未找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">}<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">//第八个,opencv.templateMatch_区域找图<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var mat=screen.screenShot(720,1280,100).getMat();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var seek = opencv.templateMatch(mat, ["图片1","图片2"],0.9, ,true);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">if (seek) {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> seek.click(); //点击<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">} else {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("未找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">}<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var mat=screen.screenShot(720,1280,100).getMat();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var seek = opencv.templateMatch(mat, ["图片1","图片2"],0.9, ,true);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">if (seek) {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> var place = seek.getRealRect();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> var x = place.getCenterX();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> var y = place.getCenterY();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl(x+","+y)<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">} else {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl("未找到了");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">}<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">//第九个,opencv.HSV颜色变换<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">// 截图并获取Mat对象<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var mat = screen.screenShot(720, 1280, 100).getMat();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">// 使用HSV方法转换<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var hsvMat = opencv.HSV(mat, 0, 0, 0);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">printl("HSV 转换完成!");<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">printl(hsvMat);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">//第十个,opencv.bitmapToMat(bmp)bitmap图转mat<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">importPackage(org.opencv.core);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">importPackage(org.opencv.imgproc);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">importPackage(org.opencv.android);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">importClass(android.graphics.Bitmap);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">function screenshotAndBinarize(minThreshold, maxThreshold) {<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> // 获取屏幕截图<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> var bitmap = screen.screenShot(640, 960, 100).getBitmap();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> // 将 Bitmap 转换为 Mat<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> var mat = new Mat();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> Utils.bitmapToMat(bitmap, mat);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> // 创建一个用于存储二值化结果的 Mat<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> var binaryMat = new Mat();<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> <br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> // 应用阈值处理<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> Imgproc.threshold(mat, binaryMat, minThreshold, maxThreshold, Imgproc.THRESH_BINARY);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> printl(binaryMat);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> // 将二值化的 Mat 转换回 Bitmap<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> var binaryBitmap = Bitmap.createBitmap(binaryMat.cols(), binaryMat.rows(), Bitmap.Config.ARGB_8888);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> Utils.matToBitmap(binaryMat, binaryBitmap);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"> return binaryBitmap;<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">}<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"><br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">// 调用处理函数<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">var resultBitmap = screenshotAndBinarize(50, 150);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;">printl(resultBitmap);<br></li><li style="padding-left: 10px; list-style-type: decimal-leading-zero; font-family: Monaco, Consolas, "Lucida Console", "Courier New", serif; font-size: 12px; line-height: 1.8em;"></li></ol></div><span style="color: rgb(255, 255, 255); margin-left: 43px; font-size: 12px; cursor: pointer; user-select: none; display: inline-block; margin-top: 8px; padding: 2px 8px; background: rgb(153, 153, 169); border-radius: 4px;">复制代码</span></div><span style="font-weight: 700;"><br><ignore_js_op> </ignore_js_op><ignore_js_op> </ignore_js_op><ignore_js_op> </ignore_js_op><ignore_js_op></ignore_js_op><br></span><span style="font-weight: 700;">1. 精简OCR识别 (safeOCRProcess 函数)</span><ul style="margin-left: 14px;"><li style="list-style-position: initial; list-style-image: initial;">步骤1:使用 opencv.checkColorsEx 检查目标区域是否存在。如果不存在,输出提示并返回。</li><li style="list-style-position: initial; list-style-image: initial;">步骤2:使用 opencv.OCREx 进行OCR识别,并对返回结果进行类型验证,确保结果是对象且包含 findIncludeText 方法。</li><li style="list-style-position: initial; list-style-image: initial;">步骤3:安全处理OCR结果,查找包含特定文本(如“蜂”)的内容,并根据结果进行后续操作或输出提示。<br></li></ul><span style="font-weight: 700;">2. 精简区域找图</span><ul style="margin-left: 14px;"><li style="list-style-position: initial; list-style-image: initial;">使用 opencv.findImagesEx 在指定区域查找图像。如果找到,点击该图像或输出其中心坐标;否则输出“未找到”。<br></li></ul><span style="font-weight: 700;">3. 精简多点找色</span><ul style="margin-left: 14px;"><li style="list-style-position: initial; list-style-image: initial;">使用 opencv.checkColorsEx 检查多点颜色是否符合预期。如果符合,输出“找到了”;否则输出“未找到”。<br></li></ul><span style="font-weight: 700;">4. 精简多点比色</span><ul style="margin-left: 14px;"><li style="list-style-position: initial; list-style-image: initial;">与第3部分类似,使用 opencv.checkColorsEx 进行多点比色,输出结果。<br></li></ul><span style="font-weight: 700;">5. OCR识别</span><ul style="margin-left: 14px;"><li style="list-style-position: initial; list-style-image: initial;">使用 opencv.OCR 对屏幕截图进行OCR识别。如果识别成功,输出所有字符串或查找包含特定文本(如“小猪猪”)的内容;否则输出“未找到”。<br></li></ul><span style="font-weight: 700;">6. 多点比色</span><ul style="margin-left: 14px;"><li style="list-style-position: initial; list-style-image: initial;">使用 opencv.checkColors 检查屏幕截图中的多点颜色是否符合预期。如果符合,输出“找到了”;否则输出“未找到”。<br></li></ul><span style="font-weight: 700;">7. 多点找色</span><ul style="margin-left: 14px;"><li style="list-style-position: initial; list-style-image: initial;">使用 opencv.findMultiColor 在屏幕截图中查找特定颜色组合。如果找到,点击该位置或输出其中心坐标;否则输出“未找到”。<br></li></ul><span style="font-weight: 700;">8. 区域找图</span><ul style="margin-left: 14px;"><li style="list-style-position: initial; list-style-image: initial;">使用 opencv.templateMatch 在屏幕截图中查找指定图像。如果找到,点击该图像或输出其中心坐标;否则输出“未找到”。<br></li></ul><span style="font-weight: 700;">9. HSV颜色变换</span><ul style="margin-left: 14px;"><li style="list-style-position: initial; list-style-image: initial;">使用 opencv.HSV 方法将屏幕截图转换为HSV颜色空间,并输出转换后的Mat对象。<br></li></ul><span style="font-weight: 700;">10. Bitmap图转Mat</span><ul style="margin-left: 14px;"><li style="list-style-position: initial; list-style-image: initial;">使用 Utils.bitmapToMat 将Bitmap图像转换为Mat对象,然后进行二值化处理,并将结果转换回Bitmap输出。</li></ul></td></tr></tbody></table><p></p>
页:
[1]