首页 文章 精选 留言 我的

精选列表

搜索[get],共10005篇文章
优秀的个人博客,低调大师

【9种】ElasticSearch分词器详解,一文get!!!| 博学谷狂野架构师

ElasticSearch 分词器 作者: 博学谷狂野架构师 只分享干货、不吹水,让我们一起加油!😄 概述 分词器的主要作用将用户输入的一段文本,按照一定逻辑,分析成多个词语的一种工具 什么是分词器 顾名思义,文本分析就是把全文本转换成一系列单词(term/token)的过程,也叫分词。在 ES 中,Analysis 是通过分词器(Analyzer) 来实现的,可使用 ES 内置的分析器或者按需定制化分析器。 举一个分词简单的例子:比如你输入 Mastering Elasticsearch,会自动帮你分成两个单词,一个是 mastering,另一个是 elasticsearch,可以看出单词也被转化成了小写的。 分词器的构成 分词器是专门处理分词的组件,分词器由以下三部分组成: 组成部分 character filter 接收原字符流,通过添加、删除或者替换操作改变原字符流 例如:去除文本中的html标签,或者将罗马数字转换成阿拉伯数字等。一个字符过滤器可以有零个或者多个 tokenizer 简单的说就是将一整段文本拆分成一个个的词。 例如拆分英文,通过空格能将句子拆分成一个个的词,但是对于中文来说,无法使用这种方式来实现。在一个分词器中,有且只有一个tokenizeer token filters 将切分的单词添加、删除或者改变 例如将所有英文单词小写,或者将英文中的停词a删除等,在token filters中,不允许将token(分出的词)的position或者offset改变。同时,在一个分词器中,可以有零个或者多个token filters. 分词顺序 同时 Analyzer 三个部分也是有顺序的,从图中可以看出,从上到下依次经过 Character Filters,Tokenizer 以及 Token Filters,这个顺序比较好理解,一个文本进来肯定要先对文本数据进行处理,再去分词,最后对分词的结果进行过滤。 索引和搜索分词 文本分词会发生在两个地方: 创建索引:当索引文档字符类型为text时,在建立索引时将会对该字段进行分词。 搜索:当对一个text类型的字段进行全文检索时,会对用户输入的文本进行分词。 配置分词器 默认ES使用standard analyzer,如果默认的分词器无法符合你的要求,可以自己配置 分词器测试 可以通过_analyzerAPI来测试分词的效果。 COPY# 过滤html 标签 POST _analyze { "tokenizer":"keyword", #原样输出 "char_filter":["html_strip"], # 过滤html标签 "text":"<b>hello world<b>" # 输入的文本 } 指定分词器 使用地方 分词器的使用地方有两个: 创建索引时 进行搜索时 创建索引时指定分词器 如果设置手动设置了分词器,ES将按照下面顺序来确定使用哪个分词器: 先判断字段是否有设置分词器,如果有,则使用字段属性上的分词器设置 如果设置了analysis.analyzer.default,则使用该设置的分词器 如果上面两个都未设置,则使用默认的standard分词器 字段指定分词器 为title属性指定分词器 COPYPUT my_index { "mappings": { "properties": { "title":{ "type":"text", "analyzer": "whitespace" } } } } 设置默认分词器 COPYPUT my_index { "settings": { "analysis": { "analyzer": { "default":{ "type":"simple" } } } } } 搜索时如何确定分词器 在搜索时,通过下面参数依次检查搜索时使用的分词器: 搜索时指定analyzer参数 创建mapping时指定字段的search_analyzer属性 创建索引时指定setting的analysis.analyzer.default_search 查看创建索引时字段指定的analyzer属性 如果上面几种都未设置,则使用默认的standard分词器。 指定analyzer 搜索时指定analyzer查询参数 COPYGET my_index/_search { "query": { "match": { "message": { "query": "Quick foxes", "analyzer": "stop" } } } } 指定字段analyzer COPYPUT my_index { "mappings": { "properties": { "title":{ "type":"text", "analyzer": "whitespace", "search_analyzer": "simple" } } } } 指定默认default_seach COPYPUT my_index { "settings": { "analysis": { "analyzer": { "default":{ "type":"simple" }, "default_seach":{ "type":"whitespace" } } } } } 内置分词器 es在索引文档时,会通过各种类型 Analyzer 对text类型字段做分析, 不同的 Analyzer 会有不同的分词结果,内置的分词器有以下几种,基本上内置的 Analyzer 包括 Language Analyzers 在内,对中文的分词都不够友好,中文分词需要安装其它 Analyzer 分析器 描述 分词对象 结果 standard 标准分析器是默认的分析器,如果没有指定,则使用该分析器。它提供了基于文法的标记化(基于 Unicode 文本分割算法,如 Unicode 标准附件 # 29所规定) ,并且对大多数语言都有效。 The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone. [ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog’s, bone ] simple 简单分析器将文本分解为任何非字母字符的标记,如数字、空格、连字符和撇号、放弃非字母字符,并将大写字母更改为小写字母。 The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone. [ the, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ] whitespace 空格分析器在遇到空白字符时将文本分解为术语 The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone. [ The, 2, QUICK, Brown-Foxes, jumped, over, the, lazy, dog’s, bone. ] stop 停止分析器与简单分析器相同,但增加了删除停止字的支持。默认使用的是 _english_ 停止词。 The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone. [ quick, brown, foxes, jumped, over, lazy, dog, s, bone ] keyword 不分词,把整个字段当做一个整体返回 The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone. [The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.] pattern 模式分析器使用正则表达式将文本拆分为术语。正则表达式应该匹配令牌分隔符,而不是令牌本身。正则表达式默认为 w+ (或所有非单词字符)。 The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone. [ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ] 多种西语系 arabic, armenian, basque, bengali, brazilian, bulgarian, catalan, cjk, czech, danish, dutch, english等等 一组旨在分析特定语言文本的分析程序。 中文扩展分析器 中文分词器最简单的是ik分词器,还有jieba分词,哈工大分词器等 分词器 描述 分词对象 结果 ik_smart ik分词器中的简单分词器,支持自定义字典,远程字典 学如逆水行舟,不进则退 [学如逆水行舟,不进则退] ik_max_word ik_分词器的全量分词器,支持自定义字典,远程字典 学如逆水行舟,不进则退 [学如逆水行舟,学如逆水,逆水行舟,逆水,行舟,不进则退,不进,则,退] 词语分词 标准分词器(Standard Tokenizer) 根据standardUnicode文本分段算法的定义,将文本划分为多个单词边界的上的术语 它是 ES 默认的分词器,它会对输入的文本按词的方式进行切分,切分好以后会进行转小写处理,默认的 stopwords 是关闭的。 使用案例 下面使用 Kibana 看一下它是怎么样进行工作的 原始内容 COPYIn 2020, Java is the best language in the world. 测试分词 在 Kibana 的开发工具(Dev Tools)中指定 Analyzer 为 standard,并输入文本 In 2020, Java is the best language in the world.,然后我们运行一下: COPYGET _analyze { "text":"In 2020, Java is the best language in the world.", "analyzer": "standard" } 可以看出是按照空格、非字母的方式对输入的文本进行了转换,比如对 Java 做了转小写,对一些停用词也没有去掉,比如 in,其中 token 为分词结果;start_offset 为起始偏移;end_offset 为结束偏移;position 为分词位置。 可配置项 选项 描述 max_token_length 最大令牌长度。如果看到令牌超过此长度,则将其max_token_length间隔分割。默认为255。 stopwords 预定义的停用词列表,例如english或包含停用词列表的数组。默认为none。 stopwords_path 包含停用词的文件的路径。 COPY{ "settings": { "analysis": { "analyzer": { "my_english_analyzer": { "type": "standard", "max_token_length": 5, "stopwords": "_english_" } } } } } 简单分词器(Letter Tokenizer) 当simple分析器遇到非字母的字符时,它会将文本划分为多个术语,它小写所有术语,对于中文和亚洲很多国家的语言来说是无用的 它只包括了 Lower Case 的 Tokenizer,它会按照非字母切分,非字母的会被去除,最后对切分好的做转小写处理,然后接着用刚才的输入文本,分词器换成 simple 来进行分词,运行结果如下: 使用案例 原始内容 COPYIn 2020, Java is the best language in the world. 测试分词 COPYGET _analyze { "text":"In 2020, Java is the best language in the world.", "analyzer": "simple" } 空白分词器(Whitespace Tokenizer) 它非常简单,根据名称也可以看出是按照空格进行切分的 该whitespace分析仪将文本分为方面每当遇到任何空白字符,和上面的分词器不同,空白分词器默认并不会将内容转换为小写。 使用案例 原始内容 COPYIn 2020, Java is the best language in the world. 测试分词 COPYGET _analyze { "text":"In 2020, Java is the best language in the world.", "analyzer": "whitespace" } 电子邮件分词器(UAX URL Email Tokenizer) 此分词器主要是针对email和url地址进行关键内容的标记。 使用案例 原始内容 COPY"Email me at john.smith@global-international.com" 测试分词 COPYGET _analyze { "text":"Email me at john.smith@global-international.com", "tokenizer": "uax_url_email" } 可配置项 max_token_length最大令牌长度。如果看到令牌超过此长度,则将其max_token_length间隔分割。默认为255 COPY{ "settings": { "analysis": { "analyzer": { "my_english_analyzer": { "type": "standard", "max_token_length": 5 } } } } } 经典分词器(Classic Tokenizer) 可对首字母缩写词,公司名称,电子邮件地址和互联网主机名进行特殊处理,但是,这些规则并不总是有效,并且此关键词生成器不适用于英语以外的大多数其他语言 特点 它最多将标点符号拆分为单词,删除标点符号,但是,不带空格的点被认为是查询关键词的一部分 此分词器可以将邮件地址和URL地址识别为查询的term(词条) 使用案例 原始内容 COPY"The 2 QUICK Brown-Foxes jumped over the lazy dog's bone." 测试分词 COPYGET _analyze { "text":"The 2 QUICK Brown-Foxes jumped over the lazy dog's bone.", "analyzer": "classic" } 可配置项 max_token_length最大令牌长度。如果看到令牌超过此长度,则将其max_token_length间隔分割。默认为255。 COPY{ "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "my_tokenizer" } }, "tokenizer": { "my_tokenizer": { "type": "classic", "max_token_length": 5 } } } } } 结构化文本分词 关键词分词器(Keyword Tokenizer) 它其实不做分词处理,只是将输入作为 Term 输出 关键词分词器其实是执行了一个空操作的分析,它将任何输入的文本作为一个单一的关键词输出。 使用案例 原始内容 COPY"In 2020, Java is the best language in the world." 测试分词 COPYGET _analyze { "text":"In 2020, Java is the best language in the world.", "analyzer": "keyword" } 会发现前后内容根本没有发生改变,这也是这个分词器的作用,有些时候我们针对一个需要分词查询的字段进行查询的时候,可能并不希望查询条件被分词,这个时候就可以使用这个分词器,整个查询条件作为一个关键词使用 正则分词器(Pattern Tokenizer) 模式标记器使用 Java正则表达式。使用JAVA的正则表达式进行词语的拆分。 它可以通过正则表达式的方式进行分词,默认是用 \W+ 进行分割的,也就是非字母的符合进行切分的。 使用案例 原始内容 COPY"In 2020, Java is the best language in the world." 测试分词 COPYGET _analyze { "text":"In 2020, Java is the best language in the world.", "analyzer": "patter" } 可配置项 正则分词器有以下的选项 选项 描述 pattern 正则表达式 flags 正则表达式标识 lowercase 是否使用小写词汇 stopwords 停止词的列表。 stopwords_path 定义停止词文件的路径。 COPY{ "settings": { "analysis": { "analyzer": { "my_email_analyzer": { "type": "pattern", "pattern": "\\W|_", "lowercase": true } } } } } 路径分词器(Path Tokenizer) 可以对文件系统的路径样式的请求进行拆分,返回被拆分各个层级内容。 使用案例 原始内容 COPY"/one/two/three" 测试分词 COPYGET _analyze { "text":"/one/two/three", "tokenizer":"path_hierarchy" } 可配置项 选项 描述 delimiter 用作路径分隔符的字符 replacement 用于定界符的可选替换字符 buffer_size 单次读取到术语缓冲区中的字符数。默认为1024。术语缓冲区将以该大小增长,直到所有文本都被消耗完为止。建议不要更改此设置。 reverse 正向还是反向获取关键词 skip 要忽略的内容 COPY{ "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "my_tokenizer" } }, "tokenizer": { "my_tokenizer": { "type": "path_hierarchy", "delimiter": "-", "replacement": "/", "skip": 2 } } } } } 语言分词(Language Analyzer) ES 为不同国家语言的输入提供了 Language Analyzer 分词器,在里面可以指定不同的语言 支持语种 支持如下语种: 关键字 语种 arabic 美 /ˈærəbɪk/ 阿拉伯语 armenian 美 /ɑːrˈmiːniən/ 亚美尼亚语 basque 美 /bæsk,bɑːsk/ 巴斯克语 bengali 美 /beŋˈɡɑːli/ 孟加拉语 brazilian 美 /brəˈzɪliən/ 巴西语 bulgarian 美 /bʌlˈɡeriən/ 保加利亚语 catalan 美 /ˈkætəlæn/ 加泰罗尼亚语 cjk 中日韩统一表意文字 czech 美 /tʃek/ 捷克语 danish 美 /ˈdeɪnɪʃ/ 丹麦语 dutch 美 /dʌtʃ/ 荷兰语 english 美 /ˈɪŋɡlɪʃ/ 英语 estonian 美 /eˈstoʊniən/ 爱沙尼亚语 finnish 美 /ˈfɪnɪʃ/ 芬兰语 french 美 /frentʃ/ 法语 galician 美 /ɡəˈlɪʃn/ 加里西亚语 german 美 /ˈdʒɜːrmən/ 德语 greek 美 /ɡriːk/ 希腊语 hindi 美 /ˈhɪndi/ 北印度语 hungarian 美 /hʌŋˈɡeriən/ 匈牙利语 indonesian 美 /ˌɪndəˈniːʒn/ 印度尼西亚语 irish 美 /ˈaɪrɪʃ/ 爱尔兰语 italian 美 /ɪˈtæliən/ 意大利语 latvian 美 /ˈlætviən/ 拉脱维亚语 lithuanian 美 /ˌlɪθuˈeɪniən/ 立陶宛语 norwegian 美 /nɔːrˈwiːdʒən/ 挪威语 persian /‘pɜːrʒən/ 波斯语 portuguese 美 /ˌpɔːrtʃʊˈɡiːz/ 葡萄牙语 romanian 美 /ro’menɪən/ 罗马尼亚语 russian 美 /ˈrʌʃn/ 俄语 sorani 索拉尼语 spanish 美 /ˈspænɪʃ/ 西班牙语 swedish 美 /ˈswiːdɪʃ/ 瑞典语 turkish 美 /ˈtɜːrkɪʃ/ 土耳其语 thai 美 /taɪ/ 泰语 使用案例 下面我们使用英语进行分析 原始内容 COPY"In 2020, Java is the best language in the world." 测试分词 COPYGET _analyze { "text":"In 2020, Java is the best language in the world.", "analyzer":"english" } 自定义分词器 当内置的分词器无法满足需求时,可以创建custom类型的分词器。 配置参数 参数 描述 tokenizer 内置或定制的tokenizer.(必须) char_filter 内置或定制的char_filter(非必须) filter 内置或定制的token filter(非必须) position_increment_gap 当值为文本数组时,设置改值会在文本的中间插入假空隙。设置该属性,对与后面的查询会有影响。默认该值为100. 创建索引 上面的示例中定义了一个名为my_custom_analyzer的分词器 该分词器的type为custom,tokenizer为standard,char_filter为hmtl_strip,filter定义了两个分别为:lowercase和asciifolding COPYPUT my_index { "settings": { "analysis": { "analyzer": { "my_custom_analyzer":{ "type":"custom", "tokenizer":"standard", "char_filter":["html_strip"], "filter":["lowercase","asciifolding"] } } } } } 使用案例 原始内容 COPYIs this <b>déjà vu</b>? 测试分词 COPYPOST my_index/_analyze { "text": "Is this <b>déjà vu</b>?", "analyzer": "my_custom_analyzer" } 中文分词器 IKAnalyzer IKAnalyzer是一个开源的,基于java的语言开发的轻量级的中文分词工具包 从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本,在 2012 版本中,IK 实现了简单的分词歧义排除算法,标志着 IK 分词器从单纯的词典分词向模拟语义分词衍化 使用IK分词器 IK提供了两个分词算法: ik_smart:最少切分。 ik_max_word:最细粒度划分。 ik_smart 使用案例 原始内容 COPY传智教育的教学质量是杠杠的 测试分词 COPYGET _analyze { "analyzer": "ik_smart", "text": "传智教育的教学质量是杠杠的" } ik_max_word 使用案例 原始内容 COPY传智教育的教学质量是杠杠的 测试分词 COPYGET _analyze { "analyzer": "ik_max_word", "text": "传智教育的教学质量是杠杠的" } 自定义词库 我们在使用IK分词器时会发现其实有时候分词的效果也并不是我们所期待的 问题描述 例如我们输入“传智教育的教学质量是杠杠的”,但是分词器会把“传智教育”进行拆开,分为了“传”,“智”,“教育”,但我们希望的是**“传智教育”可以不被拆开**。 解决方案 对于以上的问题,我们只需要将自己要保留的词,加到我们的分词器的字典中即可 编辑字典内容 进入elasticsearch目录plugins/ik/config中,创建我们自己的字典文件yixin.dic,并添加内容: COPYcd plugins/ik/config echo "传智教育" > custom.dic 扩展字典 进入我们的elasticsearch目录 :plugins/ik/config,打开IKAnalyzer.cfg.xml文件,进行如下配置: COPYvi IKAnalyzer.cfg.xml #增加如下内容 <entry key="ext_dict">custom.dic</entry> 再次测试 重启ElasticSearch,再次使用kibana测试 COPYGET _analyze { "analyzer": "ik_max_word", "text": "传智教育的教学质量是杠杠的" } 可以发现,现在我们的词汇”传智教育”就不会被拆开了,达到我们想要的效果了 本文由传智教育博学谷狂野架构师教研团队发布。 如果本文对您有帮助,欢迎关注和点赞;如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力。 转载请注明出处!

优秀的个人博客,低调大师

关键是这些技术你get了么?!

免费开通大数据服务:https://www.aliyun.com/product/odps 1月15日在北京举行了首次阿里云大数据合作伙伴深度培训,我司获邀参加,我和两名研发的同学又一次来到了阿里巴巴望京园区。  > 培训的第一部分内容、数加的介绍及应用 除了介绍性内容之外,还是有「干货」的,这个干货就是MaxCompute 的实践。MaxCompute原来叫做ODPS,www.aliyun.com/product/odps,是阿里整个大数据解决方案的基础。 上来,给我们讲了什么事数据分析,话说我们是来学习大数据的,干嘛还要研究数据分析? 因为:大数据不是用来吹的! 通过数据分析能够获得的好处有很多,但最重要的是获得数据化运营的能力! 为啥要数据化运营? 因为:百度、阿里巴巴、腾讯、苹果、谷歌、亚马逊的运营一个比一个的数据化,一个赛

优秀的个人博客,低调大师

【漫画】最近,老王又双叒get了CDN的新技能—可编程化敏捷开发

来全民加速节,听课程,购买CDN更划算 本次全民加速节,阿里云CDN诚意满满,推出《最省心CDN选购指南》《技术专家带你快速上手CDN》《阿里云CDN产品解读及全站加速在游戏行业的最佳实践》等丰富的在线课程 点击预约本周三的直播 时间: 8月12日15:00-16:00 讲师: 寒丰 阿里云CDN产品专家 研一 阿里云CDN解决方案架构师 演讲议题: 《阿里云CDN产品解读》 《DCDN全站加速在游戏行业的最佳实践》 点击进入活动页面,观看其他直播回放 产品优惠 同时全民加速节期间,阿里云CDN也为用户设置了多重优惠。 第一重:活动期间,用户可以领取活动专属的9850元代金券,当订单金额满足条件即可享受满减。第二重:爆款产品,CDN/全站加速流量包50TB,活动期间仅需4999元每年。第三重:新客户专项优惠,500GB 49.9元/年,1TB 99元/年,5TB 499元/年和10TB 999元/年。第四重,除了上述优惠,其他规格的产品套餐,在全民加速节期间也提供特惠,下行流量包购买有效期1年9折特惠,有效期1个月8.5折特惠。另外,静态https请求数包和动态请求数包9折特惠。 点击进入全民加速节页面,观看直播回放+领取优惠+查看活动详情

优秀的个人博客,低调大师

一文get工业镜头的景深、分辨率及如何匹配合适的工业相机

机器视觉系统是由进行图像处理的"控制器”和捕捉检测对象的“相机”构成。用人来做比较,这相当于“大脑"和“眼睛”。安装在工业相机上为拍摄元件收集光的“镜头”、将检测对象调节为合适亮度的“照明”也是图像处理系统上重要的配件。 下面我们来看下工业镜头的主要参数。 **1、景深** 景深即在镜头架设好后,与被测物体间相对距离不做任何调节的情况下,可接受的能清晰成像的物方空间范围。 在机器视觉中,相机芯片为光学系统的像平面,物方与像平面共轭的平面称为对准平面。严格的来讲除对准平面上的点能成点像外,其他空间点在像平面上成像为弥散斑。但由于芯片的分辨率是有限的,因此当弥散斑小于一定限度时,仍可认为是一个像点,即成像清晰。 因此景深定义为:能在像平面上获得清晰像的物方空间深度范围称为景深。能成清晰像的最远的物平面称为远景平面,它与对准平面的距离称为远景深度Δ1;能成清晰像的最近的物平面称为近景平面,它与对准平面的距离称为近景深度Δ2;景深=远景深度+近景深度。如下图所示: ![](https://developer.qcloudimg.com/http-save/yehe-11899020/57367e653f3ff4c8333745ef975d6238.png) 景深图示1 景深可由下式计算: 随着近年相机芯片像元尺寸的减小,弥散斑取0.04mm已远大于芯片的分辨能力。严格来说,不同像元尺寸的相机,由于允许的弥散斑大小不同,同一个镜头的景深也有差异。但是习惯性的,机器视觉行业各镜头厂商仍以弥散斑直径=0.04mm来计算景深。因此有经验的工程师会发现镜头实际测试出的景深值<目录上标示出的景深理论值。 由上式可以看出,景深跟镜头有效Fno.成正比。因此对于光阑可调的镜头, 当Fno.为1.4,即光阑开口最大时,景深最小。当减小Fno.为8,即光阑开口调小时,景深增大。如下图所示: 景深图示2 另外,由上式还可看出,当镜头Fno.相同时,镜头放大倍率越小,景深越大。 **2、什么工业镜头的分辨率?** 工业镜头的分辨率指能被分辨开来的两个物点(或像点)之间的最小距离,称为镜头的物方分辨率,记为Resolution(物)(或像方分辨率,记为Resolution(像)),单位为µm。制约工业镜头分辨率的原因是光的衍射现象,即衍射光斑(爱里斑)。 Resolution(物) = 0.61 x Wavelength/NA=1.22 x Wavelength x Fno. Resolution(像) = 镜头放大倍率x Resolution(物) 解像力定义为:1mm内的黑白线对数, 记为Resolving power。单位为line/mm或lp/mm. Resolving power = 1/ Resolution(像) **3、镜头分辨率跟相机分辨率如何才能匹配呢?** 我们知道,物体是成像在相机芯片上的,物方的两个点,经过镜头系统成像在相机芯片上的最小距离。假设使用0.5x的镜头拍摄22μm的物体,经过镜头后变成11μm的像,如果相机的像元大小是2.2μm,那么要用11μm/2.2μm = 5个像素来显示。单位距离的像要用5/11=1/2.2个像素来显示。即相机图像分辨率为1/2.2(单位pixel/μm),实际就是像元尺寸的倒数。从这个推导中我们得出像元尺寸越小,单位距离内相机的分辨率越高。 镜头分辨率跟相机分辨率有效的匹配方法有两种: 方法一:用物方分辨率乘以镜头放大倍率,得到像方分辨率;用算得的像方分辨率跟2倍的像元尺寸作比较: 1. 如果镜头像方分辨率 = 2倍的像元尺寸,说明匹配刚刚好,谁都不浪费。 2. 如果镜头像方分辨率 > 2倍的像元尺寸,则浪费了相机的分辨率。 3. 如果镜头像方分辨率 < 2倍的像元尺寸,则浪费了镜头的分辨率。 举个例子,相机的像元是10μm,那么: ![](https://developer.qcloudimg.com/http-save/yehe-11899020/85ce0f034fef5e49873014967c5a2933.png) 方法二:镜头分辨率表示为每毫米线对数LP/mm。假设镜头的分辨率是n LP/mm,那么必须保证感光芯片上每毫米有2n个像素,才能充分发挥镜头的分辨能力。例如镜头分辨率是200LP/mm,用每毫米有400个像素的感光芯片才不会浪费镜头的分辨率,计算下来像元尺寸大小为2.2μm,选用像元大小为2.2μm的相机合适。 **4、镜头的物方分辨率与产品的精度也常被混淆。** 精度指的是测量值与真实值之间的差异。如产品真实值为1.0mm, 要求精度为±5µm, 则说明只要测量出的值在0.995mm~1.005mm间即为合格品。在机器视觉中通常根据客户的FOV和精度要求算出相机的分辨率(如200万像素),相机一旦选定,则相机的像元尺寸(如4.65µm)也确定了。选镜头时即可根据上面的方法来选择分辨率匹配此相机的镜头,从而保证系统的精度要求。 而如果客户描述的是需要观察到物方大小为5µm的目标,则要求镜头的物方分辨率必须<10µm。

优秀的个人博客,低调大师

6大热门趋势和5大冷门趋势你get了吗?

新冠肺炎疫情给IT界带来了巨大压力,但也证明了那些关注新趋势的人做出的一系列基础设施选择是正确的。事实证明,对于很多企业来说,云是应对疫情引发变革的一剂灵丹妙药。早期采用者大胆投入的RPA和人工智能,在疫情爆发时能够主动应对,处于有利地位,企业随之推广应用,自动化也得到了很大发展。 尽管如此,不管有没有疫情,IT部门永远都不能自满。变革往往说来就来,它是这个行业永恒的组成部分。IT的变革正在加速。 负责管理代码和保持系统平稳运行的部门自然是非常谨慎的。那些在“臭鼬工厂”里高度紧张的创新者才会为了变革而进行实验。当企业的一切都能顺利运转时,保持基础设施和运营的稳定尤为重要。 然而,近来出现了许多新的策略和工具,改变了后台维持服务器和网络运行繁重工作的方式。其中一些趋势是由新的创新推动的,一些是由纯经济因素推动的,还有一些是由现实促成的。所有这些都反映了IT基础设施部门在不牺牲稳定性的情况下,是怎样保证更安全、更快速的。 趋热:混合云 人们早就认识到将程序移出服务器机房并迁移到云中的好处。由他人维护的租用计算机群非常适合间断计算和工作负载起伏变化的情况。关于信任和安全性的问题总是存在的,但是云供应商已经通过专门的团队精心解决了这些问题,这使得规模经济成为可能。 如果认为一种云还不错,两种或者三种又何尝不可呢?支持混合云可能需要更多的工作,但是如果开发人员在编写代码时非常细心,他们就能够避免被供应商锁定的危险。财务部门会很高兴有机会在混合云中对软件进行基准测试,为每一工作负载找出最便宜的供应商。 趋冷:动态网站 万维网一开始时都是静态文件。Web服务器收到一个URL,并以对每个人都相同的文件进行响应。当开发人员意识到他们可以定制用户在访问某个URL时看到的内容时,这种简单的机制很快就不受欢迎了。网页不再需要对每个人都一样。用户喜欢个性化。广告商喜欢灵活地投放广告。企业希望动态网络能呈现出新机会。因此,精心设计的框架应运而生,帮助为任何有需要的人创建定制页面。 最近,这种观点有所改变,因为开发人员和企业已经认识到,尽管有各种选择,但大多数网页最终对每个人来说几乎是一样的。创建智能服务器逻辑的所有开销都值得吗?为什么不充分利用强大的高速边缘内容分发网络,直接把同样的信息发送给每一个人呢?越来越多的智能被推到了网络的边缘。 现在,一些最新的Web开发工具可以将你的网站预提取到一个包含静态网页的文件夹中,这样你就能够以静态文件的处理速度来灵活运行动态内容管理系统。然而,结果并不是完全静态的,因为有一些JavaScript能够动态补上漏洞,使用AJAX调用也能收集一些定制的数据。 趋热:托管区块链 比特币最初设想的很大一部分是没有权力等级的去中心化经济。然而,比特币的价格非常高,因为比特币依赖于不断扩展而且非常耗电的数学竞赛。较新的区块链需要的是不那么耗电的其他可选方案,只是在数据库中插入一个新行。 有些人想通过根据你拥有的硬币数量(换句话说,你在系统中的股份)来分配权力,以简化系统。有的人则想征税或者“烧钱”。其他人想以磁盘存储而不是耗电量为衡量标准。有一小部分人只是想构建特殊的可信计时器。 最便宜的解决方案可能是放弃一场完全开放的竞争,而选择必须达成共识的管理团队。仍然在分发,但只分发给少数人。对于希望在其业务运营中构建区块链的企业来说,这可能也是他们感兴趣的:一些选定的相关方对共享账本业务交易的真实性达成了共识。 趋冷:浪费能源 比特币挖矿人并不是唯一担心电费的人。微软出于管理原因,没有在哥伦比亚河谷建立大数据中心。得益于大型水力发电大坝,那里的电价很便宜。 从最小的物联网传感器到拥有TB内存的最快的服务器,每个人都在关注硬件堆栈起起伏伏的功耗。拥有本地服务器的企业可能是最大的赢家,至少在冬天寒冷的时候是这样。可以再利用计算过程中产生的余热,为建筑物供暖。 趋热:无服务器 长期以来,开发人员一直希望能完全控制他们的环境。这是因为,如果他们不能确切地设定发行版和版本号,他们就不能保证他们的代码可以正常运行。太多的人经历了惨痛的教训才知道不一致可能是致命的。所以他们想以root权限访问他们控制的机器。 相同文件的所有副本能够让一切顺利运行,但是效率低下而且浪费。新的无服务器工具消除了系统中所有繁重的工作。现在,开发人员只需编写一个简单的接口,在需要时加载他们的代码,然后才会对此收费。对于偶尔运行的作业,无论是后台处理还是流量不大的网站,这都再合适不过了。不需要驻留在一台服务器上,其完整的操作系统占用内存,但什么也不做。 利用无服务器模式,也更容易将计算推到网络边缘。像Cloudflare和AWS这样的企业也采用了少量的无服务器代码,并在靠近用户的ISP服务器上启动它们。延迟时间缩短,响应更好了,这是因为只有很少的数据包需要长距离传输。 趋冷:薄组件 开发人员一般通过将一组较小的组件和库连接在一起来完成自己的杰作。每个部分都会为整个软件包提供一些信息。很多组成是货架式产品,例如数据库和流行的API。数十个甚至数百个部分协同工作,为用户呈现出一个统一的网页——这并不少见。 不过最近,随着开发人员加入了更多功能,产品本身也变得越来越智能。例如,有些数据库与网络的集成更加紧密,和存储在客户端上的数据同步,因此不需要构建这类功能。转译等功能现在被合并到其他工具中。随着应用程序和服务的发展壮大,粘合代码和定制功能逐渐消失了。有时会变成配置文件,有时则完全消失了。流程图仍然包含相同的功能,但整体上更大了,需要整合并保持在顶部的部分变少了。 趋热:道德、绿色的人工智能 谁不想道德水平不断提升?谁不想更环保?最近,人们都一直坚持认为,人工智能仅提供有用的模型是不够的,它同时应该是具备道德品质的。 坏消息是道德标准很难定义,甚至更难实施。有些人指向了人工智能的输出,坚持认为其输出应符合某种预先确定的模型。但是,如果已经知道了自己想要的答案,为什么还要麻烦让人工智能来寻找自己猜测的答案呢? 如果只是因为标准定义倾向于使用较少的能源,那么找到一个绿色版本的人工智能要容易得多,而且能耗是很容易衡量的。降低电耗对电力行业来说是一个巨大的变化。在过去的几十年里,当谈到机器学习和人工智能时,对比越多,计算越多,训练数据越多,那就越好。如果想充分利用人工智能,扩大规模是获得更好结果的一种途径。 然而,计算越多就越耗电,很多企业开始怀疑是否有必要使用一个碳足迹很大的大型算法。这促使人工智能开发人员测试他们是否可以返回几乎一样好的结果——或者至少足够好的结果,而不会让电表(以及随后的云计算或者本地部署的成本)疯转。 趋冷:基本存储库 在过去,不需要做太多工作就可以维持代码存储库。如果保存一份软件的副本,并跟踪其随时间的变化,那么每个人都会感到惊讶。现在,开发人员希望存储库通过一个管道来推送他们的代码,这个管道可以包括从基本单元测试到复杂优化的任何内容。仅仅让储存库成为图书馆管理员是不够的。它还必须成为管家、事实核查员、质量控制专家,有时甚至承担警察的工作。聪明的开发团队更多地依赖于存储库来执行规则。一些开发团队正在编写关于良好编码实践的规则,另一些团队则试图弄清楚代码是否经过了充分的测试。所有这些使得存储库不仅仅是一个安全的空间,它更像是集裁判、质量保证工程师甚至是语法警察于一身。 趋热:零信任 英特尔传奇人物Andy Grove的大作《只有偏执狂才能生存》面市已经有几十年了。而安全专业人士最终也不得不去完成不可能完成的工作,那就是当每个人都开始在家工作时,确保公司的秘密不被泄露。 对此,一些人支持的新模式被称为“零信任”,这意味着任何地方都没有安全的空间。应假设每台笔记本电脑都是从某个简陋咖啡馆登录的,这些国家和地区到处都是来自竞争对手的黑客。就连首席执行官办公桌上的个人电脑也是如此。一旦数据包离开机器,就应该对其进行加密并测试授权。不能因为有些人的机器是登录到某个虚拟专用网上就放松警惕。 趋冷:可信的合作伙伴 不仅仅是云服务提供商在赶走付费客户。谷歌的新工会宣布,希望在谁能购买谷歌服务方面有发言权。是的,我们大多数人都能低头忍住怒气,但是怎么知道潮流是否会对自己的企业不利呢?成也萧何败也萧何。 DevOps团队正在向云计算公司及其服务提供商提出更为棘手的问题。他们要求更好的保证。过去,每个人都迷上了机器可以立即出租的想法。没人费心去想这是否也意味着立刻被边缘化。现在便是这样。 例如,一家云计算公司制订了“包罗万象”的条款,禁止发送“低价值电子邮件”。过去,没有人去考虑电子邮件的价值。现在人们在想,使用这么笼统的条款是不是想要阻止一切。信任正在离我们而去。这种逐渐消失的信任意味着,长期关系需要更紧密的协商合同,不能有太多的回旋余地。 趋热:自动机 过去,人们需要编写一些代码才能完成工作。需有人仔细检查变量,记住关于类型、作用域和语法的所有规则。 “机器人过程自动化”这样的新工具正在改变这种形势。不过,没有像C3PO这样的机器人,它只是充实了数据操作程序。现在,精明的非程序员可以使用工具完成相当多的工作,这些工具能够消除开发过程中的大部分错误。任何人只要能在电子表格中添加一列,就可以通过简单的几下点击,产生一些精心设计的交互式结果,而不用担心宕机。 鸿蒙HarmonyOS领域与华为合作共建的综合性开发者社区 【责任编辑:赵宁宁 TEL:(010)68476606】

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册