Arduino 入门基础知识总结

根据arduino uno板子的接口进行解释,如图 L指示灯 - 接13号引脚(13号引脚内置了电阻),arduino出厂烧录了闪烁程度,板子通电后L灯闪烁。 TX/RX指示灯 - 串口通信时闪烁,分别在传输数据与接收数据时闪烁。 上排0~13接口 - 数字I/O口,可以接受以及接受数字信号(二进制形式表示的信号),arduino用电平高低来表示0,1,低电平(-0.51.5V)表示0,高电平(35.5V)表示1。用 pinMode(pin, mode) 函数来指定要用的引脚编号以及其配置模式(INPUT 输入0,OUTPUT 输出1,INPUT_PULLUP输入上拉模式)。在输入模式下,可以用 digitalRead(pin) 读取输入的数字信号;在输出模式下,用 digitalWrite(pin, value) 来指定引脚及输出的电平高低(LOW 0, HIGH 1)。 ?digitalRead()函数返回什么,!digitalRead()代表什么?如果代表true,则digitalRead()返回一个false,人体热释电持续输出低电平,在检测到人时输出高电平(范围和持续时间可以用电位器来调节),则正常情况下!digitalRead是!低电平,其代表了什么,还是说没有输出值,做个试验检测。 PWM Pulse Width Modulation 脉冲宽度调制 ~符号 - 模拟信号Output,模拟信号用连续变化的物理量来表示信息,上排接口中有 ~ 标志的接口可用于输出模拟信号。Arduino用05V的电压来表示模拟信号,通过输出周期固定(约490HZ)的方波,通过改变高低电平在每个周期中的比例(占空比)来得到近似输出不同电压的效果。具体方法为调用analogWrite(pin, value)函数,pin为指定引脚,value是PWM的脉冲宽度,范围为0255(将5v电压模拟成255段进行调整,8位精度,255=11111111)。 下排A0~A5 - 模拟信号输入引脚,用analogRead(pin)函数读取引脚上输入电压的大小。模拟输入引脚带有ADC(Analog-to-Digital Converter,模/数转换器)功能,arduino的模拟输入功能有10位精度,可以将读取到的05V电压转换为01023(1023的二进制为1111111111)的整数形式表示。 TX/RX引脚(1,0号) - transmit/receive,用于串行通信,Arduino的USB口通过一个转换芯片(通常为ATmege16u2)与这两个串口的引脚连接。该转换芯片通过USB接口在计算机上虚拟出一个用于与arduino通信的串口。串行通信是相对于并行通信的概念,并行通信占用的I/O口较多,而arduino的I/O口资源较少,因此采用串行通信方式。 下排左侧 - VCC表示电源,有3.5和5V两个接口,GND(阴极,接地)两个比较常用。

October 13, 2020 · Xiangtao XIAO

摄影技术分享网站

Fuji X Weekly 关于富士x系列的博客,提供富士胶片模拟参数设置教程,各种胶片风格模拟,图片质量很不错。 点此前往 150胶片模拟参数表 摄影师David收集并整理,谷歌文档。 查看 f16.click 富士官方X摄影师,有许多关于富士相机的体验与使用经验。提供了一组适用X70与XF10的胶片模拟参数。其中 黑白+红色滤镜 的设置效果是我比较喜欢的。 点此前往 知乎胶片模拟参数设置回答 提供了一个日系参数设置感觉效果还不错。 FILM:ASTIA DR:400% WB:AUTO HIGHLIGHT:-2 SHADOW:-2 COLOR:+1 SHARP:-2 NR:0 点此前往 持续更新ing…

July 3, 2020 · Xiangtao XIAO

设计杂志类网站

Core77 / Industrial Design Magazine 关于工业设计的新闻、点子、访谈等各种内容,网站很好看,访问不是很快。 点此前往 不断更新ing…

July 3, 2020 · Xiangtao XIAO

Fujifilm XF10 对比 Panasonic LX10

大学伊始,买了全画幅canon 6D + 24-105套头,玩了四年,让我从一个摄影小白逐步了解了摄影的各种技术,也见识了全画幅的威力——扛着一个红圈大单反出门好不威风,旅游的时候路人看到我在拍什么,常常也跟上来到同样的位置看看;同学老师们也乐意让我拍拍。尽管如此,四年下来,我对这台笨重的相机却有些厌倦了,它实在太重,加上三脚架,如果不是有重要活动,实在不想再扛着到处跑。 6D我用的其实并不多,主要用来拍了学校班级的活动以及难得出去旅游用用,现在随着对摄影的了解更加深入,逐步意识到自己在技术和审美上还存在不足,要多拍才行——我需要一个能随身带着的可以到处拍的玩意儿来提高自己的拍摄频率。那么手机不行吗?不行,手机可玩性太低,参数调整远不如相机的拨盘来的方便,目前大多数手机画质也不及相机,用手机拍照着实差了点感觉,学摄影还得相机。 预算2000元以下的卡片机,二手基本就是在XF10和LX10之间做选择。在网上看了一些测评,键盘摄影师太多 ,还是自己都买来尝试一下吧。 先说结论:我留下了XF10,根本原因在于画质与可玩性: 画质 我的目的是为了提升摄影技术,我有全幅了对变焦需求不大,定焦反而能让我专注构图拍照。XF10的APS-C画幅能与手机的画质拉开明显的差距,LX10的一英寸底则不能,特别是在手机摄影快速发展的今天,面对华为P40 pro+,即使光学变焦也不是一个很明显的优势。(说实话,华为的这款手机确实让人惊艳,也让我下定决心放弃了LX10),再过两年,把LX10的预算加在手机上买个拍照旗舰,日常拍摄发朋友圈完全够用。对比6D,XF10,LX10,可以看到画质上还是有非常明显的区别,放大画面在细节的保留上底大一级压死人的定律非常明显。XF10对细节的反映以及画面锐度是手机无法比拟的,这台相机给我的感觉更加专业,而LX10则更像是一台家用产品。 可玩性 简单来说就是好不好折腾,我是喜欢折腾的,所以这些在我来看一些缺点也能当做优点。 胶片模拟 富士的胶片模拟可用性很高,XF10提供了11种胶片模拟,并可对高光阴影对比度降噪等做进一步调整,jpeg直出色彩确实不错,不过在锐化和降噪上稍显激进导致一些网友认为涂抹感太强,实际上用raw格式在富士提供的专业软件如capture one里可以精细调整,不存在这个问题,其raw格式后期空间大,色彩丰富,同时2420万像素给了后期很大的剪裁空间,基本可以当做3倍变焦来用。LX10的raw则稍显不足,色彩不够丰富,宽容度较低,细节有所损失,因此后期空间相对较小。 快拍模式 XF10的快拍模式被许多人吐槽只有5m和2m两种模式并且不支持更改光圈,但是说实话2000元要啥自行车,和GR比完全没必要,另外在手动对焦模式下,XF10提供了对焦距离标尺,通过设置不同光圈及对焦距离,想要什么距离和景深的快拍都是可以做到的,无非是没有一个快捷键快速设置的功能,但我认为可用性也不错了(自己也不是很有街拍经验)。LX10则没有快拍模式,其开机时间也比较长(镜头要伸出来),不过考虑到对焦速度快,也是用其拍照的一种优势。 重量 在重量方面,XF10只有280g,而LX10有340g,同时LX10的镜头相较XF10凸起更加明显,就实际放在口袋里的感受来说,XF10要舒服的多,LX10会把口袋撑起来,并且让裤子有严重下坠感,在夏天,LX10放在口袋里出门并不是很方便。 性能 至于网上频繁吐槽的XF10的对焦性能与操控,坦白说个人使用绝没有网上说的那么夸张。LX10毫无疑问是完胜的,对焦迅速,触屏强大流畅,维纳斯芯片性能强劲处理速度快。XF10的对焦比较慢,但在较好光线的情况下速度不错,手动峰值对焦也可以接受,无非就是拍摄节奏比较慢。 唯一让我诟病的就是XF10的芯片显然速度不行,拍raw+fine jpg格式的照片,每一张都要处理个三四秒,这是限制拍摄节奏与连拍的最大问题,因为在处理器处理照片时,相机的触屏将失效,也就是说如果你想触屏改变模式或者对焦点,你必须等几秒相机处理完上一张照片,很多时候让我以为相机失灵了,但一般情况下,只要掌握了节奏或者不拍这么大的照片(加起来50多M)就还好。 LX10的优势 选择XF10并不代表我不喜欢LX10,实际上这款相机在我看来是一款性价比极高的相机。一般提的比较多的就是它的翻转屏,4K录制功能,5轴防抖等,这些都是XF10没有的,如果是喜欢录制视频的朋友,LX10性价比极高值得尝试。 我要着重赞美一下LX10的操控,松下的菜单以及操控实在是极其清晰简单,上手非常快,我认为这款相机很适合新手入门,去学习熟练控制光圈、快门以及感光度。并且其支持步进变焦,可以在35mm,50mm,75mm间进行切换,对熟悉焦段很有帮助。LX10在明亮环境下色彩还原度较高,用来旅行或者办公记录,都会是不错的选择。

July 1, 2020 · Xiangtao XIAO

2019巴塞尔艺术展(香港)

简介 2019年3月末于香港国际会展中心,持续3天,在咸鱼花了600买到学生3天通票,顺便在会展4楼看了免费的佳士得拍卖会展览。都可以买学生票,实际上检票人员并不会查学生证只要你不要看着太不像学生…整个展会看得快1天实际就够了,但是是比较累的,规模真的很大。 其实我觉得免费的佳士得拍卖展更好看,都是大名鼎鼎的艺术家的作品,还有很多古迹,不用隔着玻璃罩一次性看过瘾。很可惜香港现在搞事情又闹疫情,今年的展会变成线上了。 挑了几十张,大部分都是很有名的,没事儿留着翻一翻。 图片

June 3, 2020 · Xiangtao XIAO

王璜生:边界/空间——感观的释放与媒材的突破

简介 人物 王璜生 美术学博士,中央美术学院教授,博士生导师,中央美院美术馆馆长,全国美术馆专业委员会副主任,文化部“国家当代艺术研究中心”专家委员会委员。 关键字 偷渡 战争 伤害 疗愈 救赎 挣扎 自由 天堂 束缚 生命… 材料 铁丝 塑料管 铃铛 纱布 风 火 光 报纸 胶带等 形式 水墨 拓印 摄影 装置影像 图片 感受 有的作品名字忘记了,在现场看感觉挺好的,引人深思,至于照片就没啥好看的,我也不觉得这些东西好看。 大概思想就是与战争,偷渡等概念相关,所以很压抑,以前刚看完写了很多感想,现在回过头来看索然无味,没有相关经历其实看得没什么意思。

June 3, 2020 · Xiangtao XIAO

NameSilo Web hosting 云主机建站服务购买与使用体验

namesilo的域名在众多服务商里价格是比较实惠的,.com域名只要$8.99,近年新推出了web hosting服务,价格也比较实惠,最便宜的一个网站20G存储空间的套餐每月只要$2.39元(年套餐)。最近有一个做网站的需求,腾讯的学生优惠已经用过了,又不想备案,正好找到这个便宜的尝试一下。 购买 namesilo的hosting购买服务在namesilo新版网站,进入 namesilo.com 首页就能看见 总共有3个套餐,可以按年或者按月购买,按年购买会更便宜。购买过程非常简单,选择对应套餐点击Get Started。 然后会让你选择域名,这一步也提供3种选择: 1.如果你没有域名的话,可以直接搜索选择一个可注册的,然后和云主机套餐打包在namesilo购买; 2.如果你在其他注册商处(比如腾讯云等)已经购买了域名,输入你购买的域名进行绑定即可,注意要输入你希望是主网站的域名比如www.test.com,namesilo会自动增加域名解析; 3.你也可以选择将其他注册商处购买的域名转移至namesilo(不过注意如果你是新购买的域名通常有一个期限限制域名转出)。 我选择了绑定我在腾讯云购买的域名,选择好域名后点击continue即跳转到确认订单页面(注意:确认订单页面在旧版网站,新旧网站功能混在一起确实比较容易让人迷惑),不用犹豫点击确认订单,然后在付款页面选择Alipay,输入你的支付宝账号然后扫二维码付款即可。 域名解析 !!!购买完成以后,在新版网站是找不到你购买的host的,这点很让人迷惑,在新版网站,你可以选择点击自己的账户信息来跳转到旧版网站,然后在侧边栏选择hosting manager,即可进入主机管理页面,在这里你会看到自己购买的主机,名称就是你之前绑定的域名。 点击链接图标,就进入了你的主机的cpanel管理面板。第一次登陆要设置账号密码邮箱配置等,cpanel支持中文(在偏好-更改语言处选择语言),可视化界面简单易懂,网上已经有很多介绍。 购买完成后就可以前往控制面板进行相关设置了,namesilo根据你在购买时绑定的域名已经自动为该域名添加了域名解析,包括test.com,www.test.com,ftp.test.com以及mail解析等,如果购买套餐时你选择在namesilo购买一个新域名,那么一切已经就绪,在cpanel面板选择安装wordpress即可开始建站。如果像我一样绑定了其他注册商处的域名,虽然namesilo已经添加了相关解析,但这些解析是基于namesilo自家DNS服务器才会生效的,这里有两种选择: 1.到购买域名的域名注册商处将域名的DNS解析服务器地址改为namesilo的DNS服务器地址使解析生效: NS1.DNSOWL.COM NS2.DNSOWL.COM NS3.DNSOWL.COM 2.如果不希望更换DNS服务商,在cpanel面板的域名Zone找到自动添加的所有域名解析,然后将他们全部复制添加到自己的域名注册商处的域名解析中,同样可以让解析生效。 做完这些,在cpanel面板安装好wordpress,在浏览器输入你的域名就可以看到wordpress主页了! SSL证书实现HTTPS 购买的主机已经添加了自签名的SSL证书,但是自签名证书在用浏览器访问时会报不安全,一个第三方签名还是有必要的,namesilo自家在已购主机管理页面就有SSL证书购买服务,不过要花钱,有很多免费提供签名的第三方机构,我直接申请了腾讯云提供的TrustAsia 1年期免费证书(在云产品-SSL证书处申请即可)。 申请下来后下载证书得到.key及.crt证书文件(host使用的是apache服务器,要选对版本),找到cpanel面板的:安全-SSL/TLS选项,删除已有自签名证书文件,上传自己的证书文件,然后选择[管理SSL主机],选择证书对应的域名,点击按域自动填充,上传的证书会被自动选中填充,点击安装证书即可。 在cpanel面板的:域-域选项找到自己的域名,选择启用Force HTTPS Redirect,至此,网站即可安全的用HTTPS进行访问了。 CloudFlare CDN加速 在cpanel安装好wordpress后,就是进入wordpress后台搭建网站,但是实测在中国境内网页的访问速度很慢,并且容易丢包。为了提高访问速度,需要将网页进行静态缓存以及CDN加速。 类似七牛云等国内免费CDN服务要求你的主域名是备案了的,没有备案要选择海外CDN, CloudFlare 提供个人免费版CDN加速服务,推荐这个 教程,注意登录cloudflare的外国官网,中国网站注册是企业版的,注册完就有客服打电话给你谈业务了…CloudFlare的CDN需要将DNS服务器地址转成他们家的,生效时间大概十分钟不到。 在wordpress安装一个静态缓存插件,比如wp fast cache,在CDN选项选择cloudflare,需要输入API码,然后在cloudflare的Overview的侧边栏点击get your API token,选择global API,点击view,复制API代码到wordpress中即可,一路点击确认,cdn配置就完成了。 配置CDN及静态缓存后,网站的访问速度得到很明显的改善,访问变的更稳定,虽然相较国内的网站速度稍慢,但是对于像个人博客之类的小网站完全可以接受了。 邮箱 namesilo的host已经配置好了邮箱服务,发送邮件没问题,但是我用163发的邮件它却收不到,在wordpress设置中更换邮件地址,发现验证邮件也发不到我的邮箱上。因此使用了第三方的SMTP服务,下载了wp SMTP mail插件,SMTP服务用的是腾讯云的企业邮。 将原本的地址解析中的邮件地址解析删掉,添加腾讯企业邮的地址进去,就可以使用腾讯企业邮箱的服务了,方法很简单,注册一个腾讯企业邮箱账号(免费的),然后按指导设置完成即可。增加一个业务邮箱账号,比如mail@designaxt.com,然后得到对应的邮箱密匙,在wp SMTP mail选择其他SMTP,输入密匙,腾讯企业邮的服务器地址及端口号,保存更改就可以用腾讯的服务发邮件了,其他家应该类似。

May 25, 2020 · Xiangtao XIAO

Gensim训练词向量与Embedding相关知识

在进行文本分类的时候,预处理我们可以自己做一个词向量模型,也可以采用预训练的模型。采用预训练的模型比如谷歌基于goole news训练的Word2vec模型,由于在大量文本数据中训练过,所以词的概率分布会比较准确,当自己的数据集比较小的时候,用预训练数据有利于提升模型的准确度。 以下内容使用了tensorflow。 训练文本生成word2vec模型 自己训练模型一般有以下几步: 处理数据集,首先gensim的Word2Vec()方法需要的输入是句子顺序的单词,比如 我 爱 你 而不是我爱你,所以要将文本数据分词处理,在这个过程中,我们可以去除停用词,英文全部小写,语法统一等处理,可能对词向量的训练比较有帮助。 完成文本的处理以后,我们得到一个分词后的文本数据集,比如一个列表[‘she’, ‘is’, ‘beautiful’],在gensim模块中可以简单的使用model=gensim.models.word2vec.Word2Vec()得到训练的模型。 该方法有一些参数: sentences-即数据集;sg-设置训练算法,0代表CBOW,1代表skip-gram算法; size-指特征向量的维度,默认为100,大的size需要更多数据,效果更好,但是过大则浪费资源,效果提升不明显; window-当前词与预测词在一个句子中的最大距离,默认是5,比如 我 今天 成功 完成 工作,对于 成功,如果设置窗口为2,可能去预测的词就是我 今天 完成 和 工作,注意是最大值而不是一定选取四个词。最后模型输出的是一个概率分布,即一个词出现在其他词边的概率是多少,我们也就可以据此去发现相似的词。 min_count-去除词频小于min_count的词; hs-1采用hierarchy softmax,0采用negative sample; iter-迭代次数 workers-参数控制训练的并行数¨C9C 更多参考: //www.cnblogs.com/kjkj/p/9825418.html 其他训练词向量有相似的方法和思路,网上有很多资料。 使用预训练词向量 首先加载获取到准备好的模型,然后我们的目标是得到一个embedding_metrics即词向量矩阵,词向量矩阵的shape为(vocab_size, embedding_dim),它是我们要用于训练的数据的每个词(更具体的说是词表中的词)在训练好的模型中的词向量组成的矩阵。 接下来处理训练数据,即用tokenizer处理训练后的数据得到词表,然后将每条文本数据转变为用词表索引数字代替各单词表示的列表,这里给词编码的顺序是词频由高到低,再进行padding使句子输入变为定长,最后我们利用word_index和模型生成embedding_metrics,数据的准备就基本完成了。这些步骤使用tensorflow提供的api可以很简单的实现。 生成代码及相关解释如下: embedding_matrix = np.zeros((len(word_index) + 1, word2vec.vector_size)) # len(word_index) + 1,加1是因为word_index的标记是从1开始而非0,这样词索引与词向量刚好对应,并且对于padding后为 # 0的填充位置可以有对应的映射。 for word, index in word_index.items(): try: embedding_vector = word2vec.wv.getitem(str(word)) embedding_matrix[int(index)] = embedding_vector except KeyError: print("vector not found for word - %s" % word) Embedding层做了什么? Embedding层就是以one hot为输入、中间层节点为词向量维数的全连接层!而这个全连接层的参数,就是一个“词向量表”即我们的embedding_metrics,也就是说,其实onehot的作用就是查表,选择onehot表示的词对应的词向量,然后输出到下一层去。如果我们不用预处理的词向量,就是放一个空矩阵在embedding层(或者说是随机初始化参数),然后在训练网络过程中更新参数。 ...

May 22, 2020 · Xiangtao XIAO

NLP分类效果衡量指标(F1/p/r)

概念 为什么要计算F1:避免样本分布带来的偏差,综合考量分类效果,假如有100个样本,其中1个正样本,99个负样本,如果模型的预测只输出0,那么正确率是99%,这时候用正确率来衡量模型的好坏显然是不对的。 真实 1真实 0预测 1True Positive(TP)False Positive(FP)预测 0False Negative(FN)True Negative(TN) 查准率(precision),预测正确的样本在所有预测为1的样本中的比例,该值反映有多少其他类被错误的归为该类。 召回率(recall),预测正确的样本在所有真实为1的样本中的比例,该值反映有多少该类被预测为其他类了。 F1(F1-Score), 精准率和召回率的调和平均数。 Micro-F1与Macro-F1 针对多标签分类而言衡量分类效果 Micro-F1:直接计算所有类别的Precision和Recall,然后计算F1。(类别有权重,分到样本数多的类别有更大的影响力) Macro-F1:计算出每一个类的Precision和Recall并分别计算F1,最后将F1平均。(各类别的F1权重相同) 代码实现 二分类 def f1(y_hat, y_true): ''' 输入张量y_hat是输出层经过sigmoid激活的张量 y_true是label{0,1}的集和 model指的是如果是多任务分类,single会返回每个分类的f1分数,multi会返回所有类的平均f1分数(Marco-F1) 如果只是单个二分类任务,则可以忽略model ''' epsilon = 1e-7 y_hat = tf.round(y_hat)#将经过sigmoid激活的张量四舍五入变为0,1输出 # 输入的数据是矩阵,标签为单行矩阵,预测值为单列矩阵,如果不是需要转换 tp = tf.cast(tf.matmul(y_true,y_hat), 'float') #tn = tf.sum(tf.cast((1-y_hat)<em>(1-y_true), 'float'), axis=0) fp = tf.cast(tf.matmul(1-y_true,y_hat), 'float') fn = tf.cast(tf.matmul(y_true,1-y_hat), 'float') print('tp: ', tp[0][0].numpy(),'fp: ', fp[0][0].numpy(),'fn: ', fn[0][0].numpy()) p = tp/(tp+fp+epsilon)#epsilon的意义在于防止分母为0,否则当分母为0时python会报错 r = tp/(tp+fn+epsilon) f1 = 2</em>p<em>r/(p+r+epsilon) result = [f1[0][0].numpy(), p[0][0].numpy(), r[0][0].numpy()] return result 多标签 ...

May 22, 2020 · Xiangtao XIAO

多标签分类(multi-label)分类方法笔记

概述 multi-label是相较multi-class的概念,有关研究相对较少,multi-label指一个数据可以被分为多个类,一个输入对应多个输出,例如一篇新闻可以被同时打上娱乐、体育等多个类,类的数目也不确定; 对于multi-label问题的处理,主要看到三种思路: 当类别之间没有较强的联系时,将multi-label转化为多个二分类问题,对于每个类专门训练一个分类器,然后将多个分类器对同个样本进行分类输出结果达到多标签的效果。 当类别之间有一定联系的时候,将multi-label转化为multi-class问题,比如用二进制编码表示三个类:[‘人’, ‘猫’, ‘狗’],0表示不是该类,1表示是,则对于多标签分类可能有[0, 1, 1]的情况比如一张图片上既有猫又有狗,那么我们可以将每一个向量作为一个类别,比如[0, 1, 1]作为一个类,将[1, 0, 1]作为一个类,这样一来我们得到一个23个类,对单一样本输出的结果一定在这个类别空间中,这样就是一个多分类问题了,总共8个类,可以用长度为8的独热编码表示。 当然对于类别特别多(n个类)的数据集,这时候类别空间就是2n,显然类别太多了运算压力大,可以选择将类别输出的种类限制在训练集数据中存在的类别中,比如[1, 0, 0]在训练集中没有这个输出,就把他从类别中去除,当然这会影响模型的准确程度,因为它不再识别那些被踢出的可能性。 最后一种就是改进算法使其能够直接处理多标签问题,输出多个类。 多标签分类算法 对于神经网络,简单的做法是在最后输出层使用sigmoid激活函数,输出数目为类别数,每个输出都是一个概率,注意输出的多个类别的概率总和不再是1,因为是多标签问题,然后损失函数用binary_crossentrophy,相当于对每个输出分别判断属不属于该类,从而使每一个可能属于的类的概率都趋近1。 在简单的单层CNN算法的实验上效果并不是很好,确实得到了多输出的结果,但是出现了某个类概率接近1,另一个所属类概率虽然也比较突出但数值偏小,比如0.5左右的样子,同时属于3个或4个类效果就更差些,可以通过修改阈值比如threshold=0.3,大于0.3就算做该类,但改善不明显。应该和数据集不同类对应存在的样本不同有关。

May 22, 2020 · Xiangtao XIAO