-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
440 lines (238 loc) · 260 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>项脊轩</title>
<subtitle>项脊轩,旧南阁子也</subtitle>
<link href="http://blog.mindcont.com/atom.xml" rel="self"/>
<link href="http://blog.mindcont.com/"/>
<updated>2023-03-28T09:05:04.934Z</updated>
<id>http://blog.mindcont.com/</id>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>部署自己的chatgpt</title>
<link href="http://blog.mindcont.com/2023/03/28/deploy-your-own-chatgpt/"/>
<id>http://blog.mindcont.com/2023/03/28/deploy-your-own-chatgpt/</id>
<published>2023-03-28T07:49:10.000Z</published>
<updated>2023-03-28T09:05:04.934Z</updated>
<content type="html"><![CDATA[<img src="https://openaicom.imgix.net/b4871bfc-8429-4a93-a5a1-66e1dd60e3f8/gpt-4-92586ac_1080p60-poster.jpg?fm=auto&auto=compress,format&fit=min&rect=0,0,1920,1080&w=1440&h=810" width="750px"><p>Chatgpt 如火如荼,如何搭建自己的 chatgpt 服务呢?这里我们采用的技术路线 “OpenAI key” + “Chatbot UI” + “Vercel”实现。</p><span id="more"></span><p>和将一头大象放入冰箱的步骤一样,简单为三步:<br>1、申请 OpenAI 的 key;<br>2、将 Chatbot UI 项目 clone 到自己的 github 账号下;<br>3、创建 Vecel 项目 简单配置 然后 Vecel 会自动构建部署。<br>就可以使用了。</p><h2 id="申请-OpenAI-key"><a href="#申请-OpenAI-key" class="headerlink" title="申请 OpenAI key"></a>申请 OpenAI key</h2><p>参照 <a href="https://cloud.tencent.com/developer/article/2190154">一文教你快速注册 OpenAi</a></p><p>这里不在重复,经过这一步你需要拿到形如“sk-hyaUTHpxxxxxxxxxxxxxxx” 一个 key,即可进入下一步。</p><h2 id="clone-到自己的-github-账号下"><a href="#clone-到自己的-github-账号下" class="headerlink" title="clone 到自己的 github 账号下"></a>clone 到自己的 github 账号下</h2><p>1、打开项目地址 <code>https://github.com/mckaywrigley/chatbot-ui</code>, 点击 fork<br><img src="/images/resources/fork.png"></p><p>2、点击 create fork.<br><img src="/images/resources/fork-info.png"></p><h2 id="Vecel-项目和部署"><a href="#Vecel-项目和部署" class="headerlink" title="Vecel 项目和部署"></a>Vecel 项目和部署</h2><p>1、注册 Vercel 账号,推荐使用 GitHub 账号登录。<br><img src="/images/resources/login-vercel.png"></p><p>2、点击创建 Vercel 项目,import 刚才 clone 的 github 账号下的项目。<br><img src="/images/resources/add-new.png"></p><p><img src="/images/resources/import.png"></p><p>3、配置项目<br><img src="/images/resources/create-vercel.png"></p><p>ok !!!<br><img src="/images/resources/chatgpt-ok.png"></p>]]></content>
<summary type="html"><img src="https://openaicom.imgix.net/b4871bfc-8429-4a93-a5a1-66e1dd60e3f8/gpt-4-92586ac_1080p60-poster.jpg?fm=auto&auto=compress,format&fit=min&rect=0,0,1920,1080&w=1440&h=810" width="750px">
<p>Chatgpt 如火如荼,如何搭建自己的 chatgpt 服务呢?这里我们采用的技术路线 “OpenAI key” + “Chatbot UI” + “Vercel”实现。</p></summary>
</entry>
<entry>
<title>pyqt 加载自定义控件</title>
<link href="http://blog.mindcont.com/2023/03/27/pyqt-load-custom-control/"/>
<id>http://blog.mindcont.com/2023/03/27/pyqt-load-custom-control/</id>
<published>2023-03-27T08:09:19.000Z</published>
<updated>2023-03-27T08:35:18.308Z</updated>
<content type="html"><![CDATA[<h2 id="核心思想"><a href="#核心思想" class="headerlink" title="核心思想"></a>核心思想</h2><p>第一步:在 Qt Designer 中,假如您已经定义了一个从 QWidget 派生的小部件 Indicator,那么您可以在此处定义它,然后只需在您的 ui 中插入一个 QWidget 作为<strong>占位符</strong>并将其提升到 Indicator。</p><p>第二步:将 UI 文件转换为 UI_StatusBox.py <code>pyuic5.exe -o .\UI_StatusBox.py .\UI_StatusBox.ui</code></p><p>第三步:在主 python 文件中正常加载 Indicator 类,并将其赋值给类变量,这样</p><h2 id="实践"><a href="#实践" class="headerlink" title="实践"></a>实践</h2><p>第一步:绘制UI文件,占位</p><p><img src="/images/resources/custom-widget2.png"></p><p>第二步:将 UI 文件转换为 UI_StatusBox.</p><p>通过指令<code>pyuic5.exe -o .\UI_StatusBox.py .\UI_StatusBox.ui</code> 将上一步的UI文件转换为python代码,形如</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-tag">from</span> PyQt5 import QtCore, QtGui, QtWidgets</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">class Ui_Form(<span class="selector-tag">object</span>):</span><br><span class="line"> def <span class="built_in">setupUi</span>(self, Form):</span><br><span class="line"> Form.<span class="built_in">setObjectName</span>(<span class="string">"Form"</span>)</span><br><span class="line"> Form.<span class="built_in">resize</span>(<span class="number">400</span>, <span class="number">480</span>)</span><br><span class="line"> Form.<span class="built_in">setMinimumSize</span>(QtCore.<span class="built_in">QSize</span>(<span class="number">400</span>, <span class="number">480</span>))</span><br><span class="line"> Form.<span class="built_in">setMaximumSize</span>(QtCore.<span class="built_in">QSize</span>(<span class="number">400</span>, <span class="number">480</span>))</span><br><span class="line"> Form.<span class="built_in">setStyleSheet</span>(<span class="string">""</span>)</span><br><span class="line"> self.verticalLayout_2 = QtWidgets.<span class="built_in">QVBoxLayout</span>(Form)</span><br><span class="line"> self.verticalLayout_2.<span class="built_in">setObjectName</span>(<span class="string">"verticalLayout_2"</span>)</span><br><span class="line"> self.groupBox_2 = QtWidgets.<span class="built_in">QGroupBox</span>(Form)</span><br><span class="line"> self.groupBox_2.<span class="built_in">setMinimumSize</span>(QtCore.<span class="built_in">QSize</span>(<span class="number">300</span>, <span class="number">240</span>))</span><br><span class="line"> self.groupBox_2.<span class="built_in">setMaximumSize</span>(QtCore.<span class="built_in">QSize</span>(<span class="number">400</span>, <span class="number">240</span>))</span><br><span class="line"> self.groupBox_2.<span class="built_in">setAlignment</span>(QtCore.Qt.AlignCenter)</span><br><span class="line"> self.groupBox_2.<span class="built_in">setFlat</span>(True)</span><br><span class="line"></span><br><span class="line"> self.widget_3 = <span class="built_in">Indicator</span>(self.widget)</span><br><span class="line"> self.widget_3.<span class="built_in">setMinimumSize</span>(QtCore.<span class="built_in">QSize</span>(<span class="number">30</span>, <span class="number">30</span>))</span><br><span class="line"> self.widget_3.<span class="built_in">setMaximumSize</span>(QtCore.<span class="built_in">QSize</span>(<span class="number">30</span>, <span class="number">30</span>))</span><br><span class="line"> self.widget_3.<span class="built_in">setObjectName</span>(<span class="string">"widget_3"</span>)</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>可以看到 Indicator 类已经引入,后面就可以正常在python中进行控件的绘制和加载了。</p><p>第三步:在主 python 文件中正常加载 Indicator.py 和主 python文件。</p><p><code>Indicator.py</code></p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-tag">from</span> PyQt5<span class="selector-class">.QtGui</span> import QPainter, QColor</span><br><span class="line"><span class="selector-tag">from</span> PyQt5<span class="selector-class">.QtWidgets</span> import QWidget</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">class Indicator(QWidget):</span><br><span class="line"> def <span class="built_in">__init__</span>(self,parent=None):</span><br><span class="line"> <span class="built_in">super</span>().<span class="built_in">__init__</span>(parent)</span><br><span class="line"> self.color = <span class="built_in">QColor</span>(<span class="number">255</span>, <span class="number">0</span>, <span class="number">0</span>)</span><br><span class="line"> # self.<span class="built_in">initUI</span>()</span><br><span class="line"></span><br><span class="line"> def <span class="built_in">initUI</span>(self):</span><br><span class="line"> self.<span class="built_in">setGeometry</span>(<span class="number">100</span>, <span class="number">100</span>, <span class="number">100</span>, <span class="number">100</span>)</span><br><span class="line"> self.<span class="built_in">setWindowTitle</span>(<span class="string">'Status Indicator'</span>)</span><br><span class="line"></span><br><span class="line"> def <span class="built_in">paintEvent</span>(self, event):</span><br><span class="line"> qp = <span class="built_in">QPainter</span>()</span><br><span class="line"> qp.<span class="built_in">begin</span>(self)</span><br><span class="line"> self.<span class="built_in">drawIndicator</span>(qp)</span><br><span class="line"> qp.<span class="built_in">end</span>()</span><br><span class="line"></span><br><span class="line"> def <span class="built_in">drawIndicator</span>(self, qp):</span><br><span class="line"> qp.<span class="built_in">setBrush</span>(self.color)</span><br><span class="line"> qp.<span class="built_in">drawEllipse</span>(<span class="number">10</span>, <span class="number">10</span>, <span class="number">15</span>,<span class="number">15</span>) #x,y,w,h</span><br><span class="line"></span><br><span class="line"> def <span class="built_in">setColor</span>(self, color):</span><br><span class="line"> self.color = color</span><br><span class="line"> self.<span class="built_in">update</span>()</span><br><span class="line"></span><br></pre></td></tr></table></figure><p><code>效果</code><br><img src="/images/resources/custom-widget.png"></p><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><p>[1] <a href="https://stackoverflow.com/questions/19622014/how-do-i-use-promote-to-in-qt-designer-in-pyqt4">how-do-i-use-promote-to-in-qt-designer-in-pyqt4</a><br>[2] <a href="https://blog.csdn.net/yg2496194392/article/details/122283420">PyQt5 在 qtdesigner 中使用自定义的控件</a><br>[3] <a href="https://doc.qt.io/archives/qq/qq26-pyqtdesigner.html">Designing Custom Controls with PyQt</a></p>]]></content>
<summary type="html"><h2 id="核心思想"><a href="#核心思想" class="headerlink" title="核心思想"></a>核心思想</h2><p>第一步:在 Qt Designer 中,假如您已经定义了一个从 QWidget 派生的小部件 Indicator,那么您可以</summary>
</entry>
<entry>
<title>工业CT基本知识</title>
<link href="http://blog.mindcont.com/2023/03/01/Industrial-CT/"/>
<id>http://blog.mindcont.com/2023/03/01/Industrial-CT/</id>
<published>2023-03-01T10:40:10.000Z</published>
<updated>2023-03-01T10:46:10.116Z</updated>
<content type="html"><![CDATA[<p><img src="/media/ebcb7b5661a9dcf5b7eb8c199d8ae535.png"></p><p>工业CT,即工业计算机断层成像技术,被誉为”最佳无损检测手段“。基于CT的缺陷分析如今已被广泛应用,如铸件、塑料零件和BGAs。快速、准确、直观的查找到产品的内部缺陷(缺陷类型、位置、尺寸等),如裂纹、气孔、疏松、夹杂等缺陷,并进行分析,找到出现缺陷的根本原因,从而提高产品性能,延长产品使用寿命。</p><h2 id="基础知识"><a href="#基础知识" class="headerlink" title="基础知识"></a>基础知识</h2><p><a href="https://zhuanlan.zhihu.com/p/400069707">https://zhuanlan.zhihu.com/p/400069707</a></p><p><a href="https://zhuanlan.zhihu.com/p/409783356">https://zhuanlan.zhihu.com/p/409783356</a></p><h2 id="竞争对手"><a href="#竞争对手" class="headerlink" title="竞争对手"></a>竞争对手</h2><p><a href="http://www.xrayct.net/">http://www.xrayct.net/</a></p><p><a href="https://www.zeiss.com.cn/gongyeceliang/chanpin/xitong/ctduancengsaomiao.html/#products">https://www.zeiss.com.cn/gongyeceliang/chanpin/xitong/ctduancengsaomiao.html\#products</a></p><p><a href="https://www.sypi.com/">https://www.sypi.com/</a></p><p><img src="/media/59eab628bc1a9d76885a8ba03691e1ed.png"></p><p><img src="/media/48b56d6ac8960ef93d74c6d7d638c721.png"></p><p><img src="/media/7480b42d50e522f828c6287a475362d0.png"></p><h2 id="CT原理和参数"><a href="#CT原理和参数" class="headerlink" title="CT原理和参数"></a>CT原理和参数</h2><p><img src="/media/3e5173cc6ff7ceaf0508db800ec82ae6.png"><img src="/media/5b8dd474e39b085bbb849a37d6c963db.png"></p><p><img src="/media/fab1ba2980a07d3753a1e2fe8d758b1d.png"></p><p><img src="/media/1fbaa03ff2e758e2aa4fb5d8cf8f6b49.png"></p><h2 id="蔡司控制软件"><a href="#蔡司控制软件" class="headerlink" title="蔡司控制软件"></a>蔡司控制软件</h2><p><a href="https://www.zeiss.com.cn/microscopy/products/x-ray-microscopy/analysis-software.html">https://www.zeiss.com.cn/microscopy/products/x-ray-microscopy/analysis-software.html</a></p><p><a href="https://www.zeiss.com/content/dam/z/rms/countries/united-states/campaigns/scout-and-scan/en_promo-video_smartshield_final_subtitles-v2.mp4">https://www.zeiss.com/content/dam/z/rms/countries/united-states/campaigns/scout-and-scan/en_promo-video_smartshield_final_subtitles-v2.mp4</a></p><p><img src="/media/737b58ce80bf9d9b54b4858aaa6ed204.png"></p><p><img src="/media/11d36aec48d0b1a90b7cc44f6f6ca335.png"></p><p><a href="https://yxlon.comet.tech/zh/technologies-zh/industrial-ct">https://yxlon.comet.tech/zh/technologies-zh/industrial-ct</a></p><p><img src="/media/88b39f0dcb5c3af2d2434a091379b595.png"></p>]]></content>
<summary type="html"><p><img src="/media/ebcb7b5661a9dcf5b7eb8c199d8ae535.png"></p>
<p>工业CT,即工业计算机断层成像技术,被誉为”最佳无损检测手段“。基于CT的缺陷分析如今已被广泛应用,如铸件、塑料零件和BGAs。快速、准确、直观的查</summary>
<category term="运动控制" scheme="http://blog.mindcont.com/categories/%E8%BF%90%E5%8A%A8%E6%8E%A7%E5%88%B6/"/>
</entry>
<entry>
<title>复刻一个 WIFI 像素时钟</title>
<link href="http://blog.mindcont.com/2020/05/30/my-awtrix/"/>
<id>http://blog.mindcont.com/2020/05/30/my-awtrix/</id>
<published>2020-05-29T16:23:31.000Z</published>
<updated>2023-03-01T11:17:04.612Z</updated>
<content type="html"><![CDATA[<p>在知乎闲逛DIY作品,发现国外大神<a href="https://docs.blueforcer.de/#/v2/">AWTRIX 2.0</a> 基于wifi 的像素时钟很炫酷、开源、材料易得随打算复刻一个。制作过程网上已有很多资料,不多说,上作品。</p><p><video src="http://cdn-mindcont.opengps.cn/videos/my_awtrix_diy_demo.mp4" controls="controls" style="max-width: 100%; display: block; margin-left: auto; margin-right: auto;"><br>your browser does not support the video tag<br></video></p><h3 id="使用手册"><a href="#使用手册" class="headerlink" title="使用手册"></a>使用手册</h3><h4 id="用途-x2F-功能"><a href="#用途-x2F-功能" class="headerlink" title="用途/功能"></a>用途/功能</h4><p>1、计时器和秒表功能<br>2、强大的API接口,例如MQTT和REST<br>用于IFTTT等外部服务,支持IOS 快捷指令显示短消息<br>3、使用友,好可通过Web界面完成配置<br>4、集成的Appstore添加应用<br>5、支持自定义提醒、应用显示</p><h4 id="运行环境"><a href="#运行环境" class="headerlink" title="运行环境"></a>运行环境</h4><p>接口:USB Mini<br>输入电压:DC 5V 2A</p><h4 id="初始化"><a href="#初始化" class="headerlink" title="初始化"></a>初始化</h4><p>STEP1:<br>将设备接入电源,此时屏幕会显示如下<br><img src="http://cdn-mindcont.opengps.cn/blog/images/m_awtrix_hostpot.jpg"></p><p>拿起手机/笔记本 扫描WIFI网络,此时有 “AWTRIX Controller ”的热点,连接该热点</p><p>STEP2:<br>当手机连接到该热点后,会自动跳转到 <a href="http://172.217.28.1/">http://172.217.28.1</a> 网页上,如下图,此时类似于家用路由器配置界面<br><img src="http://cdn-mindcont.opengps.cn/blog/images/m_awtrix_config_step1.jpg" width="50%"></p><p>STEP3:<br>选择 第一个按钮“Configure Controller”<br><img src="http://cdn-mindcont.opengps.cn/blog/images/m_awtrix_config_step2.jpg" width="50%"></p><p>STEP4:<br>此时设备会自动扫描本地附近热点,选择你的热点。<br>其中SSID 表示你的热点名称,Password 表示你的热点密码。</p><p>STEP5:<br>当你输入完成后,设备会自动重启。正常显示下图,就进入联网模式,动态显示预先设定好的APP。<br><img src="http://cdn-mindcont.opengps.cn/blog/images/m_awtrix.png"></p><p>ENJOY~ AND HAVE FUN.</p><h4 id="出错处理和恢复"><a href="#出错处理和恢复" class="headerlink" title="出错处理和恢复"></a>出错处理和恢复</h4><p>Q1:使用一段时间后,接入电源不良<br>A: 排查输入电压是否有电?接口是否松动?可通过背板螺丝拆开,拧好各接口线路</p><p>Q2:屏幕亮,但没有动态显示<br>A:重新上电,观察是否有 WIFI (对勾)表示已连接到本地网络。观察上电是否显示 服务端IP信息,类似“172.X.X.X:9001” 字样</p><h3 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h3><p>[1] <a href="https://docs.blueforcer.de/#/v2/">AWTRIX 2.0 Docs</a></p><p>[2] <a href="https://www.thingiverse.com/thing:2791276/files">3D Print</a></p><p>[3] <a href="https://pengchujin.github.io/post/a46d7696.html">如何制作一个 WIFI 像素时钟</a></p><p>[4] <a href="https://www.bilibili.com/video/av51122911/">IOS 快捷指令</a></p>]]></content>
<summary type="html"><p>在知乎闲逛DIY作品,发现国外大神<a href="https://docs.blueforcer.de/#/v2/">AWTRIX 2.0</a> 基于wifi 的像素时钟很炫酷、开源、材料易得随打算复刻一个。制作过程网上已有很多资料,不多说,上作品。</p>
<p><v</summary>
</entry>
<entry>
<title>2018 , 我的年终总结</title>
<link href="http://blog.mindcont.com/2019/01/02/my-review-2018/"/>
<id>http://blog.mindcont.com/2019/01/02/my-review-2018/</id>
<published>2019-01-02T12:10:30.000Z</published>
<updated>2023-03-07T00:41:50.708Z</updated>
<content type="html">< --><span id="more"></span><h2 id="工作"><a href="#工作" class="headerlink" title="工作"></a>工作</h2><p>进入工作,就要以职场人的身份要求自己,办事情,干活要利索,准确,面面俱到。</p><h2 id="生活"><a href="#生活" class="headerlink" title="生活"></a>生活</h2><p>平衡工作,娱乐生活之间。</p><h2 id="未来"><a href="#未来" class="headerlink" title="未来"></a>未来</h2><p>对未来发展,要思考。</p>]]></content>
<summary type="html"><img src="http://cdn-mindcont.opengps.cn/blog/images/resources/work.jpg" width ="512px">
<p>转眼6月份毕业,7月26号入职到现在2018年刚刚过去了,进入工作后自己改变了很多,逐渐向社会靠拢,人,物质,信息之间的流动。</p>
<!--  --></summary>
<category term="随笔日记" scheme="http://blog.mindcont.com/tags/%E9%9A%8F%E7%AC%94%E6%97%A5%E8%AE%B0/"/>
</entry>
<entry>
<title>无线IO | 一个开源智能家居解决方案</title>
<link href="http://blog.mindcont.com/2018/04/16/diyprojects-raspbian/"/>
<id>http://blog.mindcont.com/2018/04/16/diyprojects-raspbian/</id>
<published>2018-04-16T10:45:31.000Z</published>
<updated>2018-10-04T00:42:52.040Z</updated>
<content type="html"><![CDATA[<img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/diy-logo.png" width ="256px"><p>我们的愿景是打造一款基于树莓派的智能家居中心。它的特点不在于重复制造轮子,而是集成现有的开源方案,提供一种低成本、透明、实用的整体解决方案。<a href="http://diy.mindcont.com/">http://diy.mindcont.com</a></p><ul><li><input checked="" disabled="" type="checkbox"> 1 基础能力(远程界面、穿透内网、状态检测)</li><li><input checked="" disabled="" type="checkbox"> 2 智能相册(feh + mplayer + seafile)</li><li><input checked="" disabled="" type="checkbox"> 3 天气报时(天气api+tts语音合成)</li><li><input disabled="" type="checkbox"> 4 远程推流</li><li><input disabled="" type="checkbox"> 5 语音交互(类似与天猫精灵)</li><li><input disabled="" type="checkbox"> 6 宠物识别</li><li><input disabled="" type="checkbox"> 7 自动发微博or微信</li></ul><p>后续搭建细节,会陆续更新在本站,欢迎感兴趣的朋友加入我们,一起享受DIY树莓派打造智能家居的乐趣:smiley::kissing_heart::tada:</p><h3 id="目录"><a href="#目录" class="headerlink" title="目录"></a>目录</h3><h4 id="1-树莓派基础能力"><a href="#1-树莓派基础能力" class="headerlink" title="1 树莓派基础能力"></a>1 树莓派基础能力</h4><ul><li><a href="https://diy.mindcont.com/#/posts/2">无线静态IP</a></li><li><a href="https://diy.mindcont.com/#/posts/3">远程界面</a></li><li><a href="https://diy.mindcont.com/#/posts/4">内网穿透</a></li></ul><h4 id="2-智能相册"><a href="#2-智能相册" class="headerlink" title="2 智能相册"></a>2 智能相册</h4><h4 id="3-天气报时"><a href="#3-天气报时" class="headerlink" title="3 天气报时"></a>3 天气报时</h4><h4 id="4-远程推流"><a href="#4-远程推流" class="headerlink" title="4 远程推流"></a>4 远程推流</h4><h4 id="5-语音交互"><a href="#5-语音交互" class="headerlink" title="5 语音交互"></a>5 语音交互</h4><h4 id="6-宠物识别"><a href="#6-宠物识别" class="headerlink" title="6 宠物识别"></a>6 宠物识别</h4><h4 id="7-自动发微博or微信"><a href="#7-自动发微博or微信" class="headerlink" title="7 自动发微博or微信"></a>7 自动发微博or微信</h4><p>More …</p><h3 id="致谢"><a href="#致谢" class="headerlink" title="致谢"></a>致谢</h3><table><thead><tr><th align="center"></th><th align="center"></th><th align="center"></th></tr></thead><tbody><tr><td align="center"><a herf="http://raspberrypi.org"><img src="https://www.home-assistant.io/images/supported_brands/raspberry-pi.png" alt="raspberrypi" width="64px"> <p>Raspberry Pi</p> </a></td><td align="center"><a herf="https://github.com/haiwen/seafile"><img src="https://www.rosehosting.com/blog/wp-content/uploads/2015/03/seafile-logo.png" alt="seafile" width="64px" > <p>Seafile</p> </a></td><td align="center"><a herf="http://www.mplayerhq.hu/design7/news.html"><img src="https://upload.wikimedia.org/wikipedia/commons/8/81/MPlayer.svg" alt="mplayer" width="80px"> <p>MPlayer</p> </a></td></tr><tr><td align="center"><a herf="https://github.com/Motion-Project/motion"><img src="https://motion-project.github.io/motion.gif" alt="motion" width="96px"> <p>Motion</p> </a></td><td align="center"><a herf="https://github.com/home-assistant/home-assistant"><img src="http://d33wubrfki0l68.cloudfront.net/075995fe17a5351e2699b2dd878652ec4f1d8654/8bfdd/demo/favicon-192x192.png" alt="home-assistant" width="64px"> <p>Home Assistant</p> </a></td><td align="center"><a herf="https://ifttt.com"><img src="https://www.home-assistant.io/images/supported_brands/ifttt.png" alt="ifttt" width="96px"> <p>IFTTT</p> </a></td></tr><tr><td align="center"><a herf="https://github.com/dingdang-robot/dingdang-robot"><img src="https://camo.githubusercontent.com/5bcef117eff53d01751ac2ce6aa479f3a0a55939/687474703a2f2f6f6e6d7737793666342e626b742e636c6f7564646e2e636f6d2f64696e6764616e672d6c6f676f2e706e67" alt="dingdang-robot" width="64px"> <p>Dingdang Robot</p> </a></td><td align="center"></td><td align="center"></td></tr></tbody></table><p>其他工具和api接口</p><ul><li><a href="https://github.com/fatedier/frp">Frp</a></li><li><a href="https://github.com/nfarina/homebridge">Homebridge</a></li><li><a href="http://wechatpy.readthedocs.io/zh_CN/master/">Wechatpy</a></li><li><a href="https://www.heweather.com/">和风天气</a></li><li><a href="http://yuyin.baidu.com/docs/tts/196">百度语音合成</a></li></ul><h3 id="License"><a href="#License" class="headerlink" title="License"></a>License</h3><p>GPL v3</p>]]></content>
<summary type="html"><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/diy-logo.png" width ="256px">
<p>我们的愿景是打造一款基于树莓派的智能家居中心。它的特点</summary>
</entry>
<entry>
<title>魔方机器人开箱</title>
<link href="http://blog.mindcont.com/2018/02/28/cube-robot/"/>
<id>http://blog.mindcont.com/2018/02/28/cube-robot/</id>
<published>2018-02-28T05:48:02.000Z</published>
<updated>2018-10-04T00:59:43.389Z</updated>
<content type="html"><![CDATA[<p>学习,理解,锻炼,在充分思考后动手,DIY能够会磨炼你的耐心和细心,这就是所谓的“创客精神的吧”!😺 😸 😹</p><span id="more"></span><p><strong>Demo</strong></p><video src="https://github.com/mindcont/mindcont.github.io/raw/master/videos/cube-robot.mp4" controls="controls" style="max-width: 500px; display: block; margin-left: auto; margin-right: auto;">your browser does not support the video tag</video><p>Let’s begin !!!🐸</p><h2 id="硬件层"><a href="#硬件层" class="headerlink" title="硬件层"></a>硬件层</h2><p>清点一下零件数量是否有缺,部分消耗品或配件(如USB连接线、白乳胶、镊子)外观可能因不同批次有所差异,并不影响使用,部分易得选配件(如电池)可能不会附赠。</p><h3 id="0、物料清单"><a href="#0、物料清单" class="headerlink" title="0、物料清单"></a>0、物料清单</h3><table><thead><tr><th>序号</th><th>名称(个)</th><th>数量</th><th>作用</th></tr></thead><tbody><tr><td>1</td><td>木板 A,B,C,D,E</td><td>各1</td><td>魔方机器人主体结构</td></tr><tr><td>2</td><td>扩展板</td><td>1</td><td>引出主控板连线,便于与舵机直接连接</td></tr><tr><td>3</td><td>主控板</td><td>1</td><td>接收电脑动作信号并转换为舵机运动指令</td></tr><tr><td>4</td><td>塑料舵机</td><td>1</td><td>用于带动旋转魔方基底的运动,与舵盘连接处白色</td></tr><tr><td>5</td><td>金属舵机</td><td>1</td><td>用于保持、释放和翻转魔方,与舵盘连接处黄色</td></tr><tr><td>6</td><td>电池盒</td><td>1</td><td>用于存放3节五号电池并给舵机供电。注意:仅凭USB数据线来自电脑主板的供电无法使两舵机正常运转!</td></tr><tr><td>7</td><td>螺丝螺母收纳纸盒</td><td>1</td><td>收纳用于固定舵机和主控板与木板支架的螺丝和螺母</td></tr><tr><td>8</td><td>高质量魔方</td><td>1</td><td>容忍旋转角度误差,当旋转不到位时不会卡住</td></tr><tr><td>9</td><td>USB数据线</td><td>1</td><td>用于给主控板烧录程序以及与电脑通信接受</td></tr><tr><td>10</td><td>五号电池</td><td>3节</td><td>用于给舵机供电</td></tr><tr><td>11</td><td>十字螺丝刀</td><td>1</td><td>用于安装螺丝螺母和电池盒与拓展板之间的供电线连接</td></tr><tr><td>12</td><td>镊子</td><td>1</td><td>用于不便于手伸入的位置夹持和安装螺母,尤其是带尼龙圈的紧固螺母</td></tr><tr><td>13</td><td>白乳胶</td><td>1</td><td>粘接木板</td></tr></tbody></table><p><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/01.jpg"></p><h3 id="1、结构拼装"><a href="#1、结构拼装" class="headerlink" title="1、结构拼装"></a>1、结构拼装</h3><p><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/02.jpg"></p><h3 id="2、魔方托盘"><a href="#2、魔方托盘" class="headerlink" title="2、魔方托盘"></a>2、魔方托盘</h3><p><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/03.jpg"></p><h3 id="3、魔方卡手"><a href="#3、魔方卡手" class="headerlink" title="3、魔方卡手"></a>3、魔方卡手</h3><p><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/04.jpg"></p><h3 id="4、主体安装"><a href="#4、主体安装" class="headerlink" title="4、主体安装"></a>4、主体安装</h3><p><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/05.jpg"></p><h3 id="5、详细组装步骤"><a href="#5、详细组装步骤" class="headerlink" title="5、详细组装步骤"></a>5、详细组装步骤</h3><p><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/06.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/07.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/08.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/09.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/10.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/11.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/12.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/13.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/14.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/15.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/16.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/17.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/18.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/19.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/20.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/21.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/22.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/23.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/24.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/25.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/26.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/27.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/28.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/29.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/30.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/31.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/32.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/33.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/34.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/35.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/36.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/37.jpg"></p><p>其中舵机接线方式</p><table><thead><tr><th>G</th><th>V</th><th>S</th><th>端口号</th></tr></thead><tbody><tr><td>黑</td><td>红</td><td>白</td><td>5</td></tr><tr><td>棕</td><td>红</td><td>黄</td><td>6</td></tr></tbody></table><p><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/38.jpg"></p><p>电池盒接线方式</p><table><thead><tr><th>极性</th><th>–</th></tr></thead><tbody><tr><td>VCC</td><td>电池盒红线</td></tr><tr><td>GND</td><td>电池盒黑线</td></tr></tbody></table><p><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/39.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/40.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/41.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/42.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/43.jpg"></p><p>至此,硬件平台组装完成 😋</p><h2 id="软件层"><a href="#软件层" class="headerlink" title="软件层"></a>软件层</h2><h3 id="1-、安装usb驱动"><a href="#1-、安装usb驱动" class="headerlink" title="1 、安装usb驱动"></a>1 、安装usb驱动</h3><p>安装CH340驱动后,电脑方可与Arduino通讯。<br>根据自己的系统版本下载对应的驱动压缩包,解压》SETUP.EXT》INSTALL 默认安装即可。</p><p>win7 <a href="http://www.arduined.eu/files/CH341SER.zip">http://www.arduined.eu/files/CH341SER.zip</a><br>win8及以上 <a href="http://www.arduined.eu/files/windows8/CH341SER.zip">http://www.arduined.eu/files/windows8/CH341SER.zip</a><br>Mac <a href="http://kig.re/downloads/CH341SER_MAC.ZIP">http://kig.re/downloads/CH341SER_MAC.ZIP</a></p><p><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/47.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/48.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/49.jpg"></p><p>检查是否安装成功。依次右键点击我的电脑》设备管理器》端口,显示<code>CH340</code>字样即说明安装成功。<br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/44.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/45.jpg"><br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/46.jpg"></p><h3 id="2、PC-端烧录程序"><a href="#2、PC-端烧录程序" class="headerlink" title="2、PC 端烧录程序"></a>2、PC 端烧录程序</h3><p>这一小节,依次打开本套件赠送的资料中<code>Arduion</code>》<code>rsolve</code>, 然后双击<code>rsolve.ino</code></p><p><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/54.jpg"></p><p>点击Upload</p><p>成功安装后,运行<code>上位机</code>》<code>windows</code>文件下<code>rubisolver.exe</code> ,如下图所示</p><p><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/57.jpg"></p><p>下列界面显示表示已经成功和Arduino通信<br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/58.jpg"></p><p>填上魔方颜色后,点击SOLVE,获得解答步骤后,点击SEND,即可<br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/59.jpg"></p><p>主控板烧录程序成功后,开机时魔方的基座旋转舵盘会归位,翻转手臂会自动翻转魔方一次。可视此过程为开机自检。如果此过程不正常,则需要重新剥离舵盘和舵机,以调整初始位置。<br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/60.jpg"></p><p>基座塑料舵机初始位:与翻转手轴线平行<br>翻转卡手舵机初始位:应远离魔方,卡在图中红色圈相应位置<br>如魔方运转过程中卡顿,请检查电池盒开关是否打开,电池盒与扩展板接线是否牢靠?</p><p><strong>提示:</strong>上位机程序看上去魔方的正面是以翻动魔方手臂的方向看去为前方,即下图所示<br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/61.jpg"></p><h3 id="3、程序调试"><a href="#3、程序调试" class="headerlink" title="3、程序调试"></a>3、程序调试</h3><p>先简单介绍一下舵机的基本知识。舵机简单的说就是集成了直流电机、电机控制器和减速器等,并封装在一个便于安装的外壳里的伺服单元。能够利用简单的输入信号比较精确的转动给定角度的电机系统。<br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/62.jpg"></p><p>舵机除电源外,只要一根信号线即可;使用PPM(脉冲比例调制)信号控制;所谓“PPM”,是一个周期约20ms,其间有个宽度在2ms 左右的脉冲控制信号。一般是以1.5ms 为基准,此时舵机居中,小于1.5ms 舵机左转,大于1.5ms,舵机右转;至于角度和脉冲宽度关系各个产品不同,例如:0.5ms 对应左转90 度,2.5ms 对应右转90 度。<br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/63-67.jpg"></p><p>由于使用不同的舵机采用的具体脉冲不同,即便是同一型号的舵机也因为死区不一致性,初始位置安装误差等,导致原始程序在部分用户安装的魔方破解机器人上不能正常工作。现根据我们所选用的舵机(塑料舵机:Futaba S3003、金属舵机:TowerPro MG995)上图图示情况进行简单的说明。</p><p>1ms(毫秒)=1000us(微秒),所以对应的情况是:<br>500us = 0°<br>1000us = 45°<br>1500us = 90°<br>2000us = 135°<br>2500us = 180°</p><p>变化区间2000us内涵盖角度0-180°,由此可见脉宽每增加或减少约11us,舵机摆动角度相应改变1°。</p><p>现在我们来分析上下位机中对应的需要调整的程序参数。在控制板烧录完程序以后,每次上电启动,魔方破解机器人都会进行一次魔方翻转运动,由此时,你可以观察魔方是否被正确顺滑翻转。你也可以在上位机传送命令F(Flip)翻转,让机器人执行此指令,如下图所示</p><p><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/68.jpg"><br>此外,上位机发送的全部指令一共就三种F(Flip)、H(Hold)、T(Turn)指令默认用空格隔开,对于一段魔方解答的结果就是由这三种指令的结果组成。(为了让部分有兴趣了解其算法的朋友能深入学习,后续我们将继续补充教程,针对此结果产生的算法进行讨论)目前我们仅讨论舵机参数需要调整以确保上诉3个动作能够完整的运行。</p><p>手臂舵机(armservo)总的来说有三个位置,对应3种指令<br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/69.jpg"></p><p><code>F(flip)</code>翻转指令必须要保证手臂和魔方高度匹配,在中间黑色示意的导向区必须保证翻转动作后能自由落下到卡位,所以两块三角形导向板之间的连接螺丝必须保持适当的松紧度。</p><p><code>H(hold)</code>把持指令执行时,手臂运动到此位置时,必须保证魔方的上两层被抓手握住,在魔方基底旋转时,魔方能被正确旋拧90度。</p><p><code>T(turn)</code>旋转指令执行时,手臂必须退到导向板卡槽处附近,并向上倾斜约45度,手臂在此位置时,魔方基底旋转不会被手臂任何部位所阻碍</p><p>接下来,我们看一下,在程序中,以上三个位置对应的参数<br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/70.jpg"></p><p>显然,</p><p><code>OFF</code>对应<code>T指令</code>时的位置<br><code>HOLD</code>对应<code>H指令</code>时的位置<br><code>PUSH</code>对应<code>F指令</code>时的位置</p><p>你可以通过上述舵机的基本知识得到相应的关系去调整此3个参数,并重新烧录程序到Arduino控制板,获得手臂位置的微调。</p><p>需要注意的是,当上位机正在运行并与控制板通信时,烧录新程序将失败,因为两个程序竞争,只有能一个程序获得通过串口与控制板通信的权利。</p><p>也部分读者可能会问,为什么不是if-else语句中if下的3个参数,那是因为我们舵机可以正反安装,当反向安装时,上面的3个参数对应的位置才有效,否则默认执行else语句下的三个参数。</p><p>基底舵机(baseservo)总的来说有四个位置,分别在指令H和T中起作用</p><p>仔细观察的读者可能已经发现,放置魔方的基底托盘并不是刚好能放下魔方,而是比魔方略大,大概宽出3-4mm。这是多方面的原因导致的,但最直接的原因就是因为翻转魔方时需要空间,同时需要兼容导向板等可能产生的误差,这个道理同样适用于卡爪上,手臂最前端的卡爪也不能是恰恰好能卡住魔方而不多留一点剩余的空间。<br><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/71.jpg"></p><p>这种<strong>冗余误差</strong>的做法,同样会给魔方扭转过程带入其它的新问题。如卡爪和底座都有空间,那么当卡爪把持魔方,底座完全旋转90°时,问题就出现了。由于空隙的存在,魔方往往不能恰好转到90°的位置。当一个位置扭不到准确的90°时,翻转或者旋转90°再扭时,魔方将会卡壳,甚至是损坏。由于我们选配了可以容错的高质量魔方(超过20元一个,而不是那种几块钱的魔方),这个问题其实已经可以容纳非常宽松的偏差,扭不到位的魔方在侧面再拧时会自动修复不到位的一面,目测10°以内不会有问题。即便如此,我们还是希望利用程序中的修正参数,把这个问题说清楚。</p><p>在魔方基底旋转的过程中,有原位和90°旋转位两个基本位置。几乎是同理加上了后缀词(over)。也就是说,当魔方基底选择时,先转到over位,然后再回到基本位,利用过转的这个超调量,克服每次动作时卡爪和基底的空隙带来的魔方90°旋转不到位。</p><p><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/cube/72.jpg"><br>基于上述的理论,你就会知道,当每次执行H(hold)指令后,如果魔方扭不到90°的正确位置,那么你就应该要尝试调整上面的4个参数咯。</p><h2 id="写在后面的话"><a href="#写在后面的话" class="headerlink" title="写在后面的话"></a>写在后面的话</h2><p>当你有幸看到这里,说明你是一个有细心,耐心和好奇心的同学,加油!期待你做出更好玩的DIY作品。 👍👍👍</p>]]></content>
<summary type="html"><p>学习,理解,锻炼,在充分思考后动手,DIY能够会磨炼你的耐心和细心,这就是所谓的“创客精神的吧”!😺 😸 😹</p></summary>
</entry>
<entry>
<title>玩转树莓派第一弹:HomeBridge控制LED灯</title>
<link href="http://blog.mindcont.com/2018/01/03/raspberrypi-homebridge/"/>
<id>http://blog.mindcont.com/2018/01/03/raspberrypi-homebridge/</id>
<published>2018-01-03T12:06:32.000Z</published>
<updated>2018-10-08T10:59:25.441Z</updated>
<content type="html"><![CDATA[<!-- <img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/homebridge_mi.png?imageMogr2/thumbnail/!70p"> --><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/homebridge_mi.png" width="500px"><span id="more"></span><!-- 本文的功能主旨 --><p>作为玩转树莓派的第一弹,这里我们将借助iPhone 和 树莓派3b 实现通过Siri语音控制LED灯开关的功能。如上图控制逻辑类似,这里我们使用<code>HomeBridge</code>作为桥梁,将Siri 的语音指令发送给树莓派,然后一个插件控制gpio 27引脚上LED灯的亮灭。</p><p>Demo</p><video src="http://cdn-mindcont.opengps.cn/videos/cube-robot.mp4" controls="controls" style="max-width: 100%; display: block; margin-left: auto; margin-right: auto;">your browser does not support the video tag</video><p>Let’s begin !!!</p><h2 id="硬件层"><a href="#硬件层" class="headerlink" title="硬件层"></a>硬件层</h2><h3 id="本期物料清单"><a href="#本期物料清单" class="headerlink" title="本期物料清单"></a>本期物料清单</h3><p>1、树莓派3b(默认ssh 打开) 一个<br>2、iPhone (ios 10以上版本) 一个<br>3、LED二极管 一个<br>4、杜邦线 两根<br>5、电阻 若干<br>5、笔记本(mac/win) 一台</p><p>其他,诸如树莓派电源(5v 2.5A),HDMI显示器连接线,读卡器等树莓派必备配件应该有。如果没有HDMI显示器连接线,可以参考<a href="http://blog.mindcont.com/2016/05/12/win10-ubuntu-remote-desktop/">win10连结ubuntu 远程桌面</a>进行远程查看。</p><h3 id="树莓派3b"><a href="#树莓派3b" class="headerlink" title="树莓派3b"></a>树莓派3b</h3><img src="/images/iot/raspberrypi_3b.jpg" width="384px"><p>规格参数,</p><p><strong>SOC</strong>: Broadcom BCM2837芯片<br><strong>CPU</strong>: 四核<a href="mailto:Cortex-A53@1.2GHz">Cortex-A53@1.2GHz</a>,ARMv8架构,32KB一级缓存 512KB二级缓存<br><strong>GPU</strong>: 双核VideoCore IV GPU@400MHz,3D core@300MHz,OpenGL ES 2.0,1080p 60fps h.264/MPEG-4 AVC<br><strong>工作温度范围</strong>: SOC-40<del>85°C,LAN9514(0</del>70°C)<br><strong>内存</strong>:1GB LPDDR2(900 MHz)<br><strong>SMSC LAN9514</strong>:4个USB2.0 和10/100M Ethernet共享<br><strong>BCM43438</strong>:WiFi(802.11 b/g/n 2.4GHz)和蓝牙4.1(BLE),支持无线电<br><strong>GPIO</strong>: 40-pin<br><strong>视频接口</strong>:HDMI1.4<br><strong>接口</strong>:DSI显示屏接口(15-pin)、CSI 2 摄像头接口(15-pin)、3.5mm复合视频输出口、microSD接口<br><strong>供电</strong>:支持5V 2.5A</p><p>GPIO引脚图,<br><img src="/images/iot/raspberrypi_3b_gpio.png" width="512px"></p><p>管脚驱动电流, 详细参见<a href="https://www.raspberrypi.org/help/faqs/#POWER">官方说明</a>。</p><pre><table> <thead> <tr> <th style="text-align:left"></th> <th style="text-align:center"></th> <th style="text-align:center">Pi1 (B+)</th> <th style="text-align:center">Pi2 B</th> <th style="text-align:center">Pi3 B (amps)</th> <th style="text-align:center">Zero (amps)</th> </tr> </thead> <tbody> <tr> <td style="text-align:left">Boot</td> <td style="text-align:center">Max</td> <td style="text-align:center">0.26</td> <td style="text-align:center">0.40</td> <td style="text-align:center">0.75</td> <td style="text-align:center">0.20</td> </tr> <tr> <td style="text-align:left"></td> <td style="text-align:center">Avg</td> <td style="text-align:center">0.22</td> <td style="text-align:center">0.22</td> <td style="text-align:center">0.35</td> <td style="text-align:center">0.15</td> </tr> <tr> <td style="text-align:left">Idle</td> <td style="text-align:center">Avg</td> <td style="text-align:center">0.20</td> <td style="text-align:center">0.22</td> <td style="text-align:center">0.30</td> <td style="text-align:center">0.10</td> </tr> <tr> <td style="text-align:left">Video playback (H.264)</td> <td style="text-align:center">Max</td> <td style="text-align:center">0.30</td> <td style="text-align:center">0.36</td> <td style="text-align:center">0.55</td> <td style="text-align:center">0.23</td> </tr> <tr> <td style="text-align:left"></td> <td style="text-align:center">Avg</td> <td style="text-align:center">0.22</td> <td style="text-align:center">0.28</td> <td style="text-align:center">0.33</td> <td style="text-align:center">0.16</td> </tr> <tr> <td style="text-align:left">Stress</td> <td style="text-align:center">Max</td> <td style="text-align:center">0.35</td> <td style="text-align:center">0.82</td> <td style="text-align:center">1.34</td> <td style="text-align:center">0.35</td> </tr> <tr> <td style="text-align:left"></td> <td style="text-align:center">Avg</td> <td style="text-align:center">0.32</td> <td style="text-align:center">0.75</td> <td style="text-align:center">0.85</td> <td style="text-align:center">0.23</td> </tr> </tbody></table></pre><h2 id="软件层"><a href="#软件层" class="headerlink" title="软件层"></a>软件层</h2><p>这一部分重点参考了 <a href="https://paine1690.github.io/2017/05/25/raspi/%E6%A0%91%E8%8E%93%E6%B4%BE%E5%AE%89%E8%A3%85homekit/">树莓派安装homekit</a>。</p><h3 id="依赖包"><a href="#依赖包" class="headerlink" title="依赖包"></a>依赖包</h3><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">## 安装nodejs</span><br><span class="line"></span><br><span class="line">curl -sL https:<span class="comment">//deb.nodesource.com/setup_4.x | sudo -E bash -</span></span><br><span class="line">sudo apt-get install -y nodejs</span><br><span class="line"></span><br><span class="line">## 安装libavahi-compat-libdnssd-dev</span><br><span class="line"></span><br><span class="line">sudo apt-get -y install libavahi-compat-libdnssd-dev</span><br></pre></td></tr></table></figure><p>如果你的树莓派是最新的系统,在安装<code>libavahi-compat-libdnssd-dev</code>的时候,应该会报一个如下依赖错误:</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">libavahi-compat-libdnssd-dev <span class="punctuation">:</span> Depends<span class="punctuation">:</span> libavahi-client-dev but it is not </span><br><span class="line">going to be installed</span><br><span class="line"></span><br><span class="line">E<span class="punctuation">:</span> Unable to correct problems<span class="punctuation">,</span> you have held broken packages.</span><br></pre></td></tr></table></figure><p>这是因为libdbus的版本过高而导致的依赖冲突,使用aptitude 解决依赖问题。更多参考<a href="https://www.douban.com/note/619209826/">邻家的の柠檬叔</a></p><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">## 如果安装过 aptitude,则跳过,直接执行第二条指令</span></span><br><span class="line">sudo apt-get install aptitude</span><br><span class="line">sudo aptitude install libavahi-compat-libdnssd-dev</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>而<code>aptitude</code>会给出一系列的建议,仔细观察,然后根据你的情况选择是(y)或者否(n)。我这里第二次才给出正确的建议。</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">The following NEW packages will be installed<span class="punctuation">:</span></span><br><span class="line"> libavahi-client-dev<span class="punctuation">{</span>a<span class="punctuation">}</span> libavahi-common-dev<span class="punctuation">{</span>a<span class="punctuation">}</span> libavahi-compat-libdnssd-dev libavahi-compat-libdnssd1<span class="punctuation">{</span>a<span class="punctuation">}</span> libdbus<span class="number">-1</span>-dev<span class="punctuation">{</span>ab<span class="punctuation">}</span></span><br><span class="line"><span class="number">0</span> packages upgraded<span class="punctuation">,</span> <span class="number">5</span> newly installed<span class="punctuation">,</span> <span class="number">0</span> to remove and <span class="number">1</span> not upgraded.</span><br><span class="line">Need to get <span class="number">401</span> kB of archives. After unpacking <span class="number">1</span><span class="punctuation">,</span><span class="number">160</span> kB will be used.</span><br><span class="line">The following packages have unmet dependencies<span class="punctuation">:</span></span><br><span class="line"> libdbus<span class="number">-1</span>-dev <span class="punctuation">:</span> Depends<span class="punctuation">:</span> libdbus<span class="number">-1</span><span class="number">-3</span> (= <span class="number">1.8</span><span class="number">.20</span><span class="number">-0</span>+deb8u1) but <span class="number">1.8</span><span class="number">.22</span><span class="number">-0</span>+deb8u1 is installed.</span><br><span class="line">The following actions will resolve these dependencies<span class="punctuation">:</span></span><br><span class="line"> Keep the following packages at their current version<span class="punctuation">:</span></span><br><span class="line"><span class="number">1</span>) libavahi-client-dev <span class="punctuation">[</span>Not Installed<span class="punctuation">]</span></span><br><span class="line"><span class="number">2</span>) libavahi-compat-libdnssd-dev <span class="punctuation">[</span>Not Installed<span class="punctuation">]</span></span><br><span class="line"><span class="number">3</span>) libdbus<span class="number">-1</span>-dev <span class="punctuation">[</span>Not Installed<span class="punctuation">]</span></span><br><span class="line">Accept this solution? <span class="punctuation">[</span>Y/n/q/?<span class="punctuation">]</span> n</span><br><span class="line">The following actions will resolve these dependencies<span class="punctuation">:</span></span><br><span class="line"> Downgrade the following packages<span class="punctuation">:</span></span><br><span class="line"><span class="number">1</span>) libdbus<span class="number">-1</span><span class="number">-3</span> <span class="punctuation">[</span><span class="number">1.8</span><span class="number">.22</span><span class="number">-0</span>+deb8u1 (now) -> <span class="number">1.8</span><span class="number">.20</span><span class="number">-0</span>+deb8u1 (stable)<span class="punctuation">]</span></span><br><span class="line">Accept this solution? <span class="punctuation">[</span>Y/n/q/?<span class="punctuation">]</span> Y</span><br><span class="line">The following packages will be DOWNGRADED<span class="punctuation">:</span></span><br><span class="line"> libdbus<span class="number">-1</span><span class="number">-3</span></span><br><span class="line">The following NEW packages will be installed<span class="punctuation">:</span></span><br><span class="line"> libavahi-client-dev<span class="punctuation">{</span>a<span class="punctuation">}</span> libavahi-common-dev<span class="punctuation">{</span>a<span class="punctuation">}</span> libavahi-compat-libdnssd-dev libavahi-compat-libdnssd1<span class="punctuation">{</span>a<span class="punctuation">}</span> libdbus<span class="number">-1</span>-dev<span class="punctuation">{</span>a<span class="punctuation">}</span></span><br><span class="line"><span class="number">0</span> packages upgraded<span class="punctuation">,</span> <span class="number">5</span> newly installed<span class="punctuation">,</span> <span class="number">1</span> downgraded<span class="punctuation">,</span> <span class="number">0</span> to remove and <span class="number">1</span> not upgraded.</span><br><span class="line">Need to get <span class="number">550</span> kB of archives. After unpacking <span class="number">1</span><span class="punctuation">,</span><span class="number">159</span> kB will be used.</span><br><span class="line">Do you want to continue? <span class="punctuation">[</span>Y/n/?<span class="punctuation">]</span> Y</span><br><span class="line">Get<span class="punctuation">:</span> <span class="number">1</span> http<span class="punctuation">:</span><span class="comment">//mirrors.sohu.com/raspbian/raspbian/ jessie/main libavahi-compat-libdnssd1 armhf 0.6.31-5 [42.9 kB]</span></span><br><span class="line">Get<span class="punctuation">:</span> <span class="number">2</span> http<span class="punctuation">:</span><span class="comment">//mirrors.sohu.com/raspbian/raspbian/ jessie/main libdbus-1-3 armhf 1.8.20-0+deb8u1 [149 kB]</span></span><br></pre></td></tr></table></figure><h3 id="npm镜像(可选)"><a href="#npm镜像(可选)" class="headerlink" title="npm镜像(可选)"></a>npm镜像(可选)</h3><p>npm全称Node Package Manager,是node.js的模块依赖管理工具。<br>因为<code>homebridge</code>需要通过npm安装,但是由于npm的源在国外,所以国内用户使用起来各种不方便。你这里可以选择是否对npm 设置国内镜像。</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">1.</span>临时使用</span><br><span class="line">npm --registry https:<span class="comment">//registry.npm.taobao.org install express</span></span><br><span class="line"></span><br><span class="line"><span class="number">2.</span>永久使用</span><br><span class="line">npm config set registry https:<span class="comment">//registry.npm.taobao.org</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// 配置后可通过下面方式来验证是否成功</span></span><br><span class="line">npm config get registry</span><br><span class="line"><span class="comment">// 或</span></span><br><span class="line">npm info express</span><br></pre></td></tr></table></figure><h3 id="HomeBridge"><a href="#HomeBridge" class="headerlink" title="HomeBridge"></a>HomeBridge</h3><p><a href="https://github.com/nfarina/homebridge">Homebridge</a>是一个轻量级的NodeJS服务器,您可以在您的家庭网络上运行,模拟iOS HomeKit API。它支持插件,它是社区贡献的模块,提供了从HomeKit到“智能家居”设备制造商提供的各种第三方API的基本桥梁。</p><p>总的来讲,就是通过<code>Homebridge</code>,使得原先没有认证的智能家居模块可以使用 苹果“家庭”应用或Siri 进行语音控制。</p><p>安装 homebridge:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo npm install -g --unsafe-perm homebridge</span><br></pre></td></tr></table></figure><p>众多的社区插件,可以通过<a href="https://www.npmjs.com/search?q=homebridge-plugin">探索其他插件</a>。<br>本次我们将利用<code>wiringpi</code>树莓派GPIO的库 和 <code>homebridge-gpio-wpi2</code>插件来实现使用siri控制LED灯的亮灭。</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install wiringpi</span><br><span class="line">sudo npm install -g homebridge-gpio-wpi2</span><br></pre></td></tr></table></figure><h2 id="联调"><a href="#联调" class="headerlink" title="联调"></a>联调</h2><h3 id="硬件连接"><a href="#硬件连接" class="headerlink" title="硬件连接"></a>硬件连接</h3><p>在启动homebridge 之前,首先将LED 发光<code>二极管正极</code>,通过杜邦线连接在 树莓派 gpio 口的<code>27</code> 管脚,也就是 靠近芯片那一侧,从上往下数第7个管脚。<code>二极管负极</code>,通过另一根杜邦线连接在 树莓派gpio的ground 管脚,我这里选择是第<code>39</code>管脚。</p><p><strong>注意</strong>,插杜邦线要注意正负极,配合管脚图谨慎操作,避免树莓派gpio口被烧坏。请根据自己二极管可承受电流,选择性使用电阻来限流。</p><h3 id="软件配置"><a href="#软件配置" class="headerlink" title="软件配置"></a>软件配置</h3><p>在普通用户pi家目录 新建<code>/home/pi/.homebridge/config.json</code>文件,复制以下内容到<code>config.json</code> ,保存。</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="punctuation">{</span></span><br><span class="line"> <span class="attr">"bridge"</span><span class="punctuation">:</span> <span class="punctuation">{</span></span><br><span class="line"> <span class="attr">"name"</span><span class="punctuation">:</span> <span class="string">"Homebridge"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"username"</span><span class="punctuation">:</span> <span class="string">"CC:22:3D:E3:CE:30"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"port"</span><span class="punctuation">:</span> <span class="number">51826</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"pin"</span><span class="punctuation">:</span> <span class="string">"133-45-678"</span></span><br><span class="line"> <span class="punctuation">}</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"platforms"</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="punctuation">{</span></span><br><span class="line"> <span class="attr">"platform"</span> <span class="punctuation">:</span> <span class="string">"WiringPiPlatform"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"name"</span> <span class="punctuation">:</span> <span class="string">"Pi GPIO (WiringPi)"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"overrideCache"</span> <span class="punctuation">:</span> <span class="string">"true"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"autoExport"</span> <span class="punctuation">:</span> <span class="string">"true"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"gpiopins"</span> <span class="punctuation">:</span> <span class="punctuation">[</span><span class="punctuation">{</span></span><br><span class="line"> <span class="attr">"name"</span> <span class="punctuation">:</span> <span class="string">"灯"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"pin"</span> <span class="punctuation">:</span> <span class="number">27</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"enabled"</span> <span class="punctuation">:</span> <span class="string">"true"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"mode"</span> <span class="punctuation">:</span> <span class="string">"out"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"pull"</span> <span class="punctuation">:</span> <span class="string">"down"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"inverted"</span> <span class="punctuation">:</span> <span class="string">"false"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"duration"</span> <span class="punctuation">:</span> <span class="number">0</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"polling"</span> <span class="punctuation">:</span> <span class="string">"true"</span></span><br><span class="line"> <span class="punctuation">}</span><span class="punctuation">,</span><span class="punctuation">{</span></span><br><span class="line"> <span class="attr">"name"</span> <span class="punctuation">:</span> <span class="string">"门"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"pin"</span> <span class="punctuation">:</span> <span class="number">22</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"enabled"</span> <span class="punctuation">:</span> <span class="string">"true"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"mode"</span> <span class="punctuation">:</span> <span class="string">"in"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"pull"</span> <span class="punctuation">:</span> <span class="string">"off"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"inverted"</span> <span class="punctuation">:</span> <span class="string">"false"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"duration"</span> <span class="punctuation">:</span> <span class="number">0</span></span><br><span class="line"> <span class="punctuation">}</span><span class="punctuation">]</span></span><br><span class="line"> <span class="punctuation">}</span><span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">}</span></span><br></pre></td></tr></table></figure><p>在命令行输入<code>homebridge</code>启动,如下图说明启动成功</p><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/homebridge.png" width=400x><p>如果你的iPhone 和树莓派在同一局域网下, 打开<code>家庭</code>应用,会自动显示可配对的设备<code>homebridge</code>,通过扫描或输入 类似<code>133-45-678</code>即可添加成功。</p><img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/ios_home.JPG" width=256px><p>赶快试试开关吧,这时你也可以通过Siri 进行控制了呢。输入日志如下</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">6</span><span class="number">-80</span>f9<span class="number">-017</span>adae59b93</span><br><span class="line"><span class="punctuation">[</span><span class="number">2018</span><span class="number">-1</span><span class="number">-4</span> <span class="number">15</span><span class="punctuation">:</span><span class="number">31</span><span class="punctuation">:</span><span class="number">11</span><span class="punctuation">]</span> <span class="punctuation">[</span>Pi GPIO (WiringPi)<span class="punctuation">]</span> Turning off pin #<span class="number">27</span></span><br><span class="line"><span class="punctuation">[</span><span class="number">2018</span><span class="number">-1</span><span class="number">-4</span> <span class="number">15</span><span class="punctuation">:</span><span class="number">31</span><span class="punctuation">:</span><span class="number">11</span><span class="punctuation">]</span> <span class="punctuation">[</span>Pi GPIO (WiringPi)<span class="punctuation">]</span> 门 Configure GPIO Pin <span class="number">57</span>b3e135<span class="number">-6285</span><span class="number">-404</span>b<span class="number">-9</span>c47-a2f46ec4426b</span><br><span class="line"><span class="punctuation">[</span><span class="number">2018</span><span class="number">-1</span><span class="number">-4</span> <span class="number">15</span><span class="punctuation">:</span><span class="number">31</span><span class="punctuation">:</span><span class="number">11</span><span class="punctuation">]</span> <span class="punctuation">[</span>Pi GPIO (WiringPi)<span class="punctuation">]</span> Setting up interrupt callback</span><br><span class="line">Setup Payload<span class="punctuation">:</span></span><br><span class="line">X-HM<span class="punctuation">:</span><span class="comment">//0023OVLOU45DL</span></span><br><span class="line">Scan this code with your HomeKit app on your iOS device to pair with Homebridge<span class="punctuation">:</span></span><br><span class="line">.</span><br><span class="line">.</span><br><span class="line">.</span><br><span class="line">Or enter this code with your HomeKit app on your iOS device to pair with Homebridge<span class="punctuation">:</span></span><br><span class="line"> </span><br><span class="line"> ┌────────────┐ </span><br><span class="line"> │ <span class="number">133</span><span class="number">-45</span><span class="number">-678</span> │ </span><br><span class="line"> └────────────┘ </span><br><span class="line"> </span><br><span class="line"><span class="punctuation">[</span><span class="number">2018</span><span class="number">-1</span><span class="number">-4</span> <span class="number">15</span><span class="punctuation">:</span><span class="number">31</span><span class="punctuation">:</span><span class="number">11</span><span class="punctuation">]</span> <span class="punctuation">[</span>Pi GPIO (WiringPi)<span class="punctuation">]</span> Loading cached GPIO pins complete</span><br><span class="line"><span class="punctuation">[</span><span class="number">2018</span><span class="number">-1</span><span class="number">-4</span> <span class="number">15</span><span class="punctuation">:</span><span class="number">31</span><span class="punctuation">:</span><span class="number">11</span><span class="punctuation">]</span> Homebridge is running on port <span class="number">51826.</span></span><br><span class="line"><span class="punctuation">[</span><span class="number">2018</span><span class="number">-1</span><span class="number">-4</span> <span class="number">15</span><span class="punctuation">:</span><span class="number">32</span><span class="punctuation">:</span><span class="number">35</span><span class="punctuation">]</span> <span class="punctuation">[</span>Pi GPIO (WiringPi)<span class="punctuation">]</span> Turning on pin #<span class="number">27</span></span><br><span class="line"><span class="punctuation">[</span><span class="number">2018</span><span class="number">-1</span><span class="number">-4</span> <span class="number">15</span><span class="punctuation">:</span><span class="number">32</span><span class="punctuation">:</span><span class="number">36</span><span class="punctuation">]</span> <span class="punctuation">[</span>Pi GPIO (WiringPi)<span class="punctuation">]</span> Turning off pin #<span class="number">27</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li>[1] <a href="http://riny.net/2014/cnpm/">国内优秀npm镜像推荐及使用</a></li><li>[2] <a href="https://paine1690.github.io/2017/05/25/raspi/%E6%A0%91%E8%8E%93%E6%B4%BE%E5%AE%89%E8%A3%85homekit/">树莓派安装homekit</a></li><li>[3] <a href="https://www.jianshu.com/p/ec79b2711bd5">树莓派进阶(一):借助树莓派与 HomeBridge,从米家到 HomeKit</a></li><li>[4] <a href="https://www.npmjs.com/search?q=homebridge-plugin">探索其他插件</a></li><li>[5] <a href="https://www.jianshu.com/p/a255c22b96fa">树莓派3B规格+GPIO引脚图+负载电流参考</a></li><li>[6] <a href="https://blog.mindcont.com/2016/05/05/raspberry-pi-excellent-project/">有趣的树莓派项目</a></li><li>[7] <a href="http://shumeipai.nxez.com/2017/09/04/homekit-and-siri-voice-control-home-appliances.html">家具变智能:用HomeKit+Siri声控家里电器</a></li><li>[8] <a href="http://kittenyang.com/homeassistant_practice_02/">利用 HomeAssistant +树莓派+ Amazon Echo 的智能家居实践(二)—— 初识 HomeAssistant</a></li></ul>]]></content>
<summary type="html"><!-- <img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/homebridge_mi.png?imageMogr2/thumbnail/!70p"> -->
<img src="https://github.com/mindcont/mindcont.github.io/raw/master/images/iot/homebridge_mi.png" width="500px"></summary>
<category term="物联" scheme="http://blog.mindcont.com/categories/%E7%89%A9%E8%81%94/"/>
<category term="树莓派" scheme="http://blog.mindcont.com/tags/%E6%A0%91%E8%8E%93%E6%B4%BE/"/>
</entry>
<entry>
<title>我的影评</title>
<link href="http://blog.mindcont.com/2017/10/20/my-movie-review/"/>
<id>http://blog.mindcont.com/2017/10/20/my-movie-review/</id>
<published>2017-10-20T07:40:08.000Z</published>
<updated>2017-12-07T00:58:17.978Z</updated>
<content type="html">< --><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous"><script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script><script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script><h3 id="顺序不分先后"><a href="#顺序不分先后" class="headerlink" title="顺序不分先后"></a>顺序不分先后</h3><p>1、 《顽主》 1988年,葛优,张国立主演, <a href="https://movie.douban.com/subject/1307690/">豆瓣评分:8.3</a></p><!-- <img src="https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p2363497441.webp" width="135px" align="left"> --><!-- <div style="FONT-FAMILY: 楷体,楷体_GB2312, SimKai; TEXT-ALIGN="right"> <img src="https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p2363497441.webp" width="135px" align="left"> <p >80年代太强悍:社会青年张嘴就是弗洛伊德尼采、扔一石头能砸中10个诗人、时装秀如意识形态大联欢;这么多年过去,社会的人际架构未变,一曲国产摇滚吼出的仍是心声,混混青年太可爱,能把叫兽玩死,“逻辑不对啊,你们应该痛苦”“可是我们不痛苦”,这种代沟和偏见至今无法消弭。</p></div> --><table style="FONT-FAMILY: 楷体,楷体_GB2312, SimKai; font-size="20px""> <tbody> <tr> <td class="align-baseline"> <img src="https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p2363497441.webp ";></td> <td class="align-middle">该片于1988年上映,反映了改革开放那个年代下,各色人物涌入北京所带来的那种文化上的冲击,人们的彷徨,青年人的挣扎以及众生的忙忙碌碌;北京满大街的公共汽车,骑自行车的人们,社会青年张嘴就是弗洛伊德尼采、扔一石头能砸中10个诗人、时装秀如意识形态大联欢;这么多年过去,社会的人际架构未变,一曲国产摇滚吼出的仍是心声,混混青年太可爱,能把叫兽玩死, “逻辑不对啊,你们应该痛苦”“可是我们不痛苦”,这种代沟和偏见至今无法消弭。</td> </tr> </tbody></table><p>2、《牯岭街少年杀人事件》 1991,导演:杨德昌 主演:张震 <a href="https://movie.douban.com/subject/1292329/">豆瓣评分:8.7</a></p><table style="FONT-FAMILY: 楷体,楷体_GB2312, SimKai; "> <tbody> <tr> <td class="align-baseline"> <img src="https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p848381236.webp";></td> <td class="align-middle">民国三十八年前后,数百万的中国人随着国民政府退居台湾,绝大多数的这些人,只是为了一份安定的工作,为了下一代的一个安定成长环境。然而,在这下一代成长的过程里,却发现父母正生活在对前途的未知与惶恐中。这些少年,在这不安定的气氛里,往往以组织帮派来壮大自己幼小薄弱的生存意识。在那个特定的年代,从孩子到成人时代的一种过渡,面对成人世界的规则是否妥协与苟且,显而易见的是,多数人都选择了后者。</td> </tr> </tbody></table><p>3、《刀》又名断刀客 1995,导演:徐克 主演:赵文卓 <a href="https://movie.douban.com/subject/1401962/">豆瓣评分:7.9</a></p><table style="FONT-FAMILY: 楷体,楷体_GB2312, SimKai; "> <tbody> <tr> <td class="align-baseline"> <img src="http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2165557623.webp";></td> <td class="align-middle">多情剑客与无情剑。<br>出来混就别耍花样,不想做买卖,就别坐这张桌子。江湖上的买卖,你只能占得了一时的便宜,对方总会有一天拿回他失去的东西。他若拿不回,他的后人也会去拿回。</td> </tr> </tbody></table><p>More ….. ,未完待续</p>]]></content>
<summary type="html"><p>电影,以蒙太奇的手法,围绕一段故事,几位人物,剪辑变换间带领观众进入情节,随着主人公一起进入方片时间,偷得浮生半日闲。一段光影一段人生。随着观影数量的增加,思考和视角也越深,这里将几部观后感记录下来。</p></summary>
</entry>
<entry>
<title>求职笔记</title>
<link href="http://blog.mindcont.com/2017/09/09/interview-diary/"/>
<id>http://blog.mindcont.com/2017/09/09/interview-diary/</id>
<published>2017-09-09T05:13:48.000Z</published>
<updated>2018-01-09T02:08:14.075Z</updated>
<content type="html"><![CDATA[<p><img src="/images/resources/shawshank.jpg"></p><!-- <p style="font-size:18px"><span style="FONT-FAMILY: 楷体,楷体_GB2312, SimKai"> 每个人的大学都离不开求职,像肖申克的救赎一样,涤尽罪恶 在彼岸重生<br> 从学生时代进入工作和生活,妥协和屈服,迷茫和怅惘...<br> 这里将我在互联网企业求职过程和心得记录下来<br> 它将持续更新,直到我获得第一份正式工作为止</span></p> --><p>每个人的大学都离不开求职,像肖申克的救赎一样,涤尽罪恶 在彼岸重生<br> 从学生时代进入工作和生活,<br>妥协和屈服,迷茫和怅惘…<br> 这里将我在互联网企业求职过程和心得记录下来<br> 它将持续更新,直到我获得第一份正式工作为止</p><h2 id="认识自己"><a href="#认识自己" class="headerlink" title="认识自己"></a>认识自己</h2><p> 认识自己(性格,技术/管理/销售…),审视自己,遵循内心,自己值什么价,职业规划(前途,也就是未来生活和打算)</p><p> 找准自己的优势和弱势,找到自己熟悉的那个城市的生活方式,适合自己的level,对你工作、生活有很大的帮助。</p><p><a href="https://www.zhihu.com/question/20221715">如何高效地找工作?</a><br><a href="https://www.zhihu.com/question/21383951">哪个求职网站(app)最靠谱?</a></p><p><strong>Q</strong>:互联网企业有哪些岗位?<br><strong>A</strong>:产品,前端,后端,运营,运维,销售</p><h2 id="面试准备"><a href="#面试准备" class="headerlink" title="面试准备"></a>面试准备</h2><p> 简历(一页,抓重点,扬长避短)<a href="http://office.mmais.com.cn/List.shtml?cat=WORD&tag=13">模板</a></p><p> 前端(html/css/js/框架/作品)</p><p> 算法,数据结构,面试题 <a href="https://www.nowcoder.com/">牛客网刷题</a></p><ul><li>排序 快速排序,冒泡排序,<a href="http://bubkoo.com/2014/01/14/sort-algorithm/heap-sort/">堆排序</a></li><li>链表 散列表</li><li>前序遍历,中序遍历,后续遍历 <a href="http://blog.csdn.net/antineutrino/article/details/6763722">后缀表达式</a></li><li>c/c++ 多线程,java,ssh ,tomcat,nginx,github</li><li>linux下编程,gcc,g++,cmake</li></ul><p>企业文化(<strong>加分项</strong>, 企业是做什么,主打什么)</p><h3 id="招聘信息"><a href="#招聘信息" class="headerlink" title="招聘信息"></a>招聘信息</h3><ul><li><p>1 岗位信息<br><a href="https://xiaoyuan.zhaopin.com/">校园招聘</a><br>各大企业校招平台、宣讲会<br><a href="https://www.lagou.com/">拉钩网</a> (这一块主要是社招)</p></li><li><p>2 面经<br>薪资,待遇。 <a href="http://www.kanzhun.com/">看准网</a></p></li><li><p>3 事业单位<br>公务员 (国考/省考/选调生) 党员优先<br>铁路交通 (中车/中铁各单位)交通类院校优先<br>电信运营 (移动/联通/电信 各省分 县市 研究院)邮电类院校优先<br>教师医生 (教师资格证/高校教师、 辅导员)<a href="http://www.gaoxiaojob.com/">高校人才网</a><br>银行期货 (招商/中信)</p></li></ul><h2 id="时间表"><a href="#时间表" class="headerlink" title="时间表"></a>时间表</h2><p>下面是历年几个比较热门的企业目录,待遇氛围都很好,校招有“金九银十”之说,多去好大学宣讲会转,欢迎大家留意补充~</p><ul><li><p><strong>[互联网巨头]</strong> 百度、阿里、腾讯、谷歌、MSRA、亚马逊</p></li><li><p><strong>[衣食住行类]</strong> 网易,美团,饿了么,滴滴,携程,摩拜,<a href="http://211.147.25.243/g17209.aspx">中车</a>,中铁各局,建工集团</p></li><li><p><strong>[通信和电力]</strong> 小米,中兴,vivo,<a href="http://career.huawei.com/reccampportal/campus4_index.html#campus4/pages/home/trainee.html?type=0&faqtype=3">华为</a>,<a href="http://special.zhaopin.com/2017/sh/zgyd091093w/scJob.html">移动</a>,电信,<a href="http://chinaunicom2018.zhaopin.com/cl.html?=1105801">联通</a> <a href="http://wk.yingjiesheng.com/v-000-022-341.html">联通面经</a>, <a href="http://xjgc.zhaopin.com/">国家电网</a>,<a href="http://sgm.zhiye.com/campusjobs">上汽通用</a>,<a href="http://career.inspur.com/cwbase/web/recportal/index.html">浪潮</a> (适合山东想回家的孩子)</p></li><li><p><strong>[金融]</strong> <a href="http://career.cmbchina.com/Campus/Campus.html">招商银行</a>,建设</p></li><li><p><strong>[软硬结合]</strong> <a href="http://campus.hikvision.com/">海康威视</a>,大疆,联发科</p></li></ul><h2 id="面试心得"><a href="#面试心得" class="headerlink" title="面试心得"></a>面试心得</h2><p>项目经验!!!<br>项目经验!!!<br>项目经验!!!<br>重要的事情说三遍,向HR阐述你具备这项工作的能力要求,你能带来的价值,还有就知道市场行情,自己能卖什么价。</p><p>图像处理算法工程师 <a href="http://blog.csdn.net/u013360881/article/details/47609581">常用算法</a> <a href="http://blog.csdn.net/liuuze5/article/details/44247043">招聘要求</a></p><ul><li>就业协议书(三方,你,学校,用人单位)</li><li>劳动合同(薪资待遇,合同年限,违约金)</li></ul><h2 id="与君共勉"><a href="#与君共勉" class="headerlink" title="与君共勉"></a>与君共勉</h2><p style="font-size:18px"><span style="FONT-FAMILY: 楷体,楷体_GB2312, SimKai"> <br>前程浩浩,后顾茫茫。<br><br>红日初升,其道大光。河出伏流,一泻汪洋。潜龙腾渊,鳞爪飞扬。乳虎啸谷,百兽震惶。鹰隼试翼,风尘翕张。奇花初胎,矞矞皇皇。干将发硎,有作其芒。天戴其苍,地履其黄。纵有千古,横有八荒。前途似海,来日方长。</span></p><p style="TEXT-ALIGN: right "><br/><span style="FONT-FAMILY: 楷体,楷体_GB2312, SimKai">——梁启超《少年中国说》节选</span></p><p ><br/><span style="FONT-FAMILY: 楷体,楷体_GB2312, SimKai">与君共勉<br>丁酉年七月十九日于大连</span></p>]]></content>
<summary type="html"><p><img src="/images/resources/shawshank.jpg"></p>
<!-- <p style="font-size:18px"><span style="FONT-FAMILY: 楷体,楷体_GB2312, SimKai"> 每个人的大学都离不</summary>
<category term="随笔日记" scheme="http://blog.mindcont.com/categories/%E9%9A%8F%E7%AC%94%E6%97%A5%E8%AE%B0/"/>
</entry>
<entry>
<title>Caffe 入门-MNIST 实验</title>
<link href="http://blog.mindcont.com/2017/04/25/how-to-do-mnist-demo/"/>
<id>http://blog.mindcont.com/2017/04/25/how-to-do-mnist-demo/</id>
<published>2017-04-25T03:45:16.000Z</published>
<updated>2018-02-27T02:46:08.428Z</updated>
<content type="html"><![CDATA[<p>MNIST 是一个包含各种手写数字(0-9)图片(images)和对应标签(label)的数据集,下面我们将介绍如何利用 <a href="https://github.com/bvlc/caffe/">Caffe</a>框架对手写数字识别一个完整的流程,本实验代码可以<a href="https://github.com/mindcont/caffe/blob/master/examples/mnist">github</a>下载。</p><span id="more"></span><p><img src="/images/research/caffe/asamples.gif"></p><h2 id="数据集准备"><a href="#数据集准备" class="headerlink" title="数据集准备"></a>数据集准备</h2><h3 id="下载数据集"><a href="#下载数据集" class="headerlink" title="下载数据集"></a>下载数据集</h3><p>You will first need to download and convert the data format from the MNIST website. To do this, simply run the following commands:</p><p>We will assume that you have Caffe successfully compiled. If not, please refer to the <a href="">Installation page</a>. In this tutorial, we will assume that your Caffe installation is located at CAFFE_ROOT.</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> <span class="variable">$CAFFE_ROOT</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 下载数据集并解压</span></span><br><span class="line">./data/mnist/get_mnist.sh</span><br></pre></td></tr></table></figure><p>输出结果</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line">pi<span class="meta">@DEEPMIND</span>:~/caffe$ ./data/mnist/get_mnist.sh</span><br><span class="line">Downloading...</span><br><span class="line">--<span class="number">2017</span>-<span class="number">04</span>-<span class="number">24</span> 09:<span class="number">59</span>:<span class="number">12</span>-- http:<span class="comment">//yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz</span></span><br><span class="line">正在解析主机 yann.lecun.com (yann.lecun.com)... <span class="number">216.165</span><span class="number">.22</span><span class="number">.6</span></span><br><span class="line">正在连接 yann.lecun.com (yann.lecun.com)|<span class="number">216.165</span><span class="number">.22</span><span class="number">.6</span>|:<span class="number">80.</span>.. 已连接。</span><br><span class="line">已发出 HTTP 请求,正在等待回应... <span class="number">302</span> Found</span><br><span class="line">位置:http:<span class="comment">//10.10.10.50/files/4107000000008DA0/yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz [跟随至新的 URL]</span></span><br><span class="line">--<span class="number">2017</span>-<span class="number">04</span>-<span class="number">24</span> 09:<span class="number">59</span>:<span class="number">17</span>-- http:<span class="comment">//10.10.10.50/files/4107000000008DA0/yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz</span></span><br><span class="line">正在连接 <span class="number">10.10</span><span class="number">.10</span><span class="number">.50</span>:<span class="number">80.</span>.. 已连接。</span><br><span class="line">已发出 HTTP 请求,正在等待回应... <span class="number">200</span> OK</span><br><span class="line">长度: <span class="number">9912422</span> (<span class="number">9.</span>5M) [application/octet-stream]</span><br><span class="line">正在保存至: “train-images-idx3-ubyte.gz”</span><br><span class="line"></span><br><span class="line"><span class="number">100</span>%[======================================>] <span class="number">9</span>,<span class="number">912</span>,<span class="number">422</span> 479KB/s 用时 20s </span><br><span class="line"></span><br><span class="line"><span class="number">2017</span>-<span class="number">04</span>-<span class="number">24</span> 09:<span class="number">59</span>:<span class="number">37</span> (<span class="number">485</span> KB/s) - 已保存 “train-images-idx3-ubyte.gz” [<span class="number">9912422</span>/<span class="number">9912422</span>])</span><br><span class="line">.</span><br><span class="line">.</span><br><span class="line">.</span><br><span class="line">长度: <span class="number">4542</span> (<span class="number">4.</span>4K) [application/x-gzip]</span><br><span class="line">正在保存至: “t10k-labels-idx1-ubyte.gz”</span><br><span class="line"></span><br><span class="line"><span class="number">100</span>%[======================================>] <span class="number">4</span>,<span class="number">542</span> --.-K/s 用时 <span class="number">0.</span>001s</span><br><span class="line"></span><br><span class="line"><span class="number">2017</span>-<span class="number">04</span>-<span class="number">24</span> 09:<span class="number">59</span>:<span class="number">44</span> (<span class="number">7.86</span> MB/s) - 已保存 “t10k-labels-idx1-ubyte.gz” [<span class="number">4542</span>/<span class="number">4542</span>])</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="数据存储格式"><a href="#数据存储格式" class="headerlink" title="数据存储格式"></a>数据存储格式</h3><p>There are 4 files:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">训练集</span><br><span class="line">train-images-idx3-ubyte: training <span class="built_in">set</span> images</span><br><span class="line">train-labels-idx1-ubyte: training <span class="built_in">set</span> labels</span><br><span class="line"></span><br><span class="line">验证集</span><br><span class="line">t10k-images-idx3-ubyte: <span class="built_in">test</span> <span class="built_in">set</span> images</span><br><span class="line">t10k-labels-idx1-ubyte: <span class="built_in">test</span> <span class="built_in">set</span> labels</span><br></pre></td></tr></table></figure><p>The training set contains 60000 examples, and the test set 10000 examples.</p><p>The first 5000 examples of the test set are taken from the original NIST training set. The last 5000 are taken from the original NIST test set. The first 5000 are cleaner and easier than the last 5000.</p><p>对于每个文件的存储格式,以train-images-idx3-ubyte 训练集图片:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">TRAINING SET IMAGE FILE (train-images-idx3-ubyte):</span><br><span class="line">[offset] [type] [value] [description]</span><br><span class="line">0000 32 bit integer 0x00000803(2051) magic number</span><br><span class="line">0004 32 bit integer 60000 number of images</span><br><span class="line">0008 32 bit integer 28 number of rows</span><br><span class="line">0012 32 bit integer 28 number of columns</span><br><span class="line">0016 unsigned byte ?? pixel</span><br><span class="line">0017 unsigned byte ?? pixel</span><br><span class="line">........</span><br><span class="line">xxxx unsigned byte ?? pixel</span><br><span class="line"></span><br><span class="line">Pixels are organized row-wise. Pixel values are 0 to 255. 0 means background (white), 255 means foreground (black).</span><br></pre></td></tr></table></figure><p>头部信息存储 整个文件信息(magic_number,number of images,image_width,image_hight),按字节偏移地址依次存储 每个像素的信息,对于单副图片我们要依次遍历28*28个像素,更多参见<a href="http://yann.lecun.com/exdb/mnist/">mnist</a> 。</p><h3 id="可视化MNIST-数据集"><a href="#可视化MNIST-数据集" class="headerlink" title="可视化MNIST 数据集"></a>可视化MNIST 数据集</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /data/mnist</span><br><span class="line"><span class="built_in">mkdir</span> train</span><br><span class="line">python visual_mnist_data.py</span><br></pre></td></tr></table></figure><p>从 <code>data/mnist/train/</code>下,我们可以看到刚才将 rain-images-idx3-ubyte 提取出来的训练集图像,可以看到训练集中单个图片是28*28 单通道灰度图像,如下图所示</p><p><img src="/images/research/caffe/0.png"></p><p>标签文件按图片名称顺序代表图片中数字。如 <code>0.png</code> 对应label.txt 第一个字符 5。</p><h3 id="转化为lmdb-格式"><a href="#转化为lmdb-格式" class="headerlink" title="转化为lmdb 格式"></a>转化为lmdb 格式</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./examples/mnist/create_mnist.sh</span><br></pre></td></tr></table></figure><p>输出结果</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">pi<span class="meta">@DEEPMIND</span>:~/caffe$ ./examples/mnist/create_mnist.sh</span><br><span class="line">Creating lmdb...</span><br><span class="line">I0424 <span class="number">10</span>:<span class="number">03</span>:<span class="number">11.133980</span> <span class="number">2966</span> db_lmdb.cpp:<span class="number">35</span>] Opened lmdb examples/mnist/mnist_train_lmdb</span><br><span class="line">I0424 <span class="number">10</span>:<span class="number">03</span>:<span class="number">11.134397</span> <span class="number">2966</span> convert_mnist_data.cpp:<span class="number">88</span>] A total of <span class="number">60000</span> items.</span><br><span class="line">I0424 <span class="number">10</span>:<span class="number">03</span>:<span class="number">11.134409</span> <span class="number">2966</span> convert_mnist_data.cpp:<span class="number">89</span>] Rows: <span class="number">28</span> Cols: <span class="number">28</span></span><br><span class="line">I0424 <span class="number">10</span>:<span class="number">03</span>:<span class="number">15.408113</span> <span class="number">2966</span> convert_mnist_data.cpp:<span class="number">108</span>] Processed <span class="number">60000</span> files.</span><br><span class="line">I0424 <span class="number">10</span>:<span class="number">03</span>:<span class="number">15.553190</span> <span class="number">2969</span> db_lmdb.cpp:<span class="number">35</span>] Opened lmdb examples/mnist/mnist_test_lmdb</span><br><span class="line">I0424 <span class="number">10</span>:<span class="number">03</span>:<span class="number">15.553597</span> <span class="number">2969</span> convert_mnist_data.cpp:<span class="number">88</span>] A total of <span class="number">10000</span> items.</span><br><span class="line">I0424 <span class="number">10</span>:<span class="number">03</span>:<span class="number">15.553642</span> <span class="number">2969</span> convert_mnist_data.cpp:<span class="number">89</span>] Rows: <span class="number">28</span> Cols: <span class="number">28</span></span><br><span class="line">I0424 <span class="number">10</span>:<span class="number">03</span>:<span class="number">16.184403</span> <span class="number">2969</span> convert_mnist_data.cpp:<span class="number">108</span>] Processed <span class="number">10000</span> files.</span><br><span class="line">Done.</span><br><span class="line"></span><br></pre></td></tr></table></figure><h2 id="定义MNIST-网络"><a href="#定义MNIST-网络" class="headerlink" title="定义MNIST 网络"></a>定义MNIST 网络</h2><p>这一部分,官方教程比较好,移步<a href="https://github.com/bvlc/caffe/blob/master/examples/mnist/readme.md">Training LeNet on MNIST with Caffe</a>。<br>值得注意的是:本本所使用的LeNet模型 ,和原始的有所不同,我们使用Relu 代替 sigmoid,在<code>examples/mnist/lenet_train_test.prototxt</code>下。</p><h3 id="可视化网络"><a href="#可视化网络" class="headerlink" title="可视化网络"></a>可视化网络</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> examples/mnist/trian</span><br><span class="line">bash ./vis_net.sh</span><br></pre></td></tr></table></figure><p>训练网络<br><img src="/images/research/caffe/lenet_train_test.png"></p><p>测试/部署网络,即用于测试,和训练网络区别在于没有标签的输入,只有前向传播过程。<br><img src="/images/research/caffe/lenet.png"></p><h2 id="训练"><a href="#训练" class="headerlink" title="训练"></a>训练</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /examples/mnist/train</span><br><span class="line">./</span><br><span class="line">./train_lenet.sh</span><br></pre></td></tr></table></figure><p>其中<code>train_lenet.sh</code>内容如下</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">#!/usr/bin/env sh</span><br><span class="line">set -e</span><br><span class="line"></span><br><span class="line">log_path=<span class="string">"logs/"</span></span><br><span class="line">mkdir -p $log_path</span><br><span class="line"></span><br><span class="line">save_model_path=<span class="string">"caffemodel/"</span></span><br><span class="line">mkdir -p $save_model_path</span><br><span class="line"></span><br><span class="line"># training log</span><br><span class="line">file_prefix=<span class="string">"mnist_"</span></span><br><span class="line">log_file=$(date -d <span class="string">"today"</span> +<span class="string">"%Y-%m-%d-%H:%M:%S"</span>)</span><br><span class="line">log_file=$log_path$file_prefix$log_file<span class="string">".log"</span></span><br><span class="line"></span><br><span class="line"># caffe execute file path</span><br><span class="line">caffe_bin=<span class="string">"../../../build/tools/caffe"</span></span><br><span class="line"></span><br><span class="line">$caffe_bin train --solver=lenet_solver.prototxt <span class="number">2</span>>&<span class="number">1</span> | tee -a $log_file</span><br></pre></td></tr></table></figure><p>观察训练日志输出,保存在<code>logs/</code></p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br></pre></td><td class="code"><pre><span class="line">I0424 <span class="number">11</span>:<span class="number">10</span>:<span class="number">01.759721</span> <span class="number">4049</span> caffe.cpp:<span class="number">211</span>] Use CPU.</span><br><span class="line">I0424 <span class="number">11</span>:<span class="number">10</span>:<span class="number">01.785264</span> <span class="number">4049</span> solver.cpp:<span class="number">44</span>] Initializing solver from parameters:</span><br><span class="line">test_iter: <span class="number">100</span></span><br><span class="line">test_interval: <span class="number">500</span></span><br><span class="line">base_lr: <span class="number">0.01</span></span><br><span class="line">display: <span class="number">100</span></span><br><span class="line">max_iter: <span class="number">10000</span></span><br><span class="line">lr_policy: <span class="string">"inv"</span></span><br><span class="line">gamma: <span class="number">0.0001</span></span><br><span class="line">power: <span class="number">0.75</span></span><br><span class="line">momentum: <span class="number">0.9</span></span><br><span class="line">weight_decay: <span class="number">0.0005</span></span><br><span class="line">snapshot: <span class="number">5000</span></span><br><span class="line">snapshot_prefix: <span class="string">"caffemodel/lenet"</span></span><br><span class="line">solver_mode: CPU</span><br><span class="line">net: <span class="string">"lenet_train_test.prototxt"</span></span><br><span class="line">train_state {</span><br><span class="line"> level: <span class="number">0</span></span><br><span class="line"> stage: <span class="string">""</span></span><br><span class="line">}</span><br><span class="line">I0424 <span class="number">11</span>:<span class="number">10</span>:<span class="number">01.785367</span> <span class="number">4049</span> solver.cpp:<span class="number">87</span>] Creating training net from net file: lenet_train_test.prototxt</span><br><span class="line">I0424 <span class="number">11</span>:<span class="number">10</span>:<span class="number">01.785703</span> <span class="number">4049</span> net.cpp:<span class="number">294</span>] The NetState <span class="title function_">phase</span> <span class="params">(<span class="number">0</span>)</span> differed from the <span class="title function_">phase</span> <span class="params">(<span class="number">1</span>)</span> specified by a rule in layer mnist</span><br><span class="line">I0424 <span class="number">11</span>:<span class="number">10</span>:<span class="number">01.785719</span> <span class="number">4049</span> net.cpp:<span class="number">294</span>] The NetState <span class="title function_">phase</span> <span class="params">(<span class="number">0</span>)</span> differed from the <span class="title function_">phase</span> <span class="params">(<span class="number">1</span>)</span> specified by a rule in layer accuracy</span><br><span class="line">I0424 <span class="number">11</span>:<span class="number">10</span>:<span class="number">01.785794</span> <span class="number">4049</span> net.cpp:<span class="number">51</span>] Initializing net from parameters:</span><br><span class="line">name: <span class="string">"LeNet"</span></span><br><span class="line">state {</span><br><span class="line"> phase: TRAIN</span><br><span class="line"> level: <span class="number">0</span></span><br><span class="line"> stage: <span class="string">""</span></span><br><span class="line">}</span><br><span class="line">layer {</span><br><span class="line"> name: <span class="string">"mnist"</span></span><br><span class="line"> type: <span class="string">"Data"</span></span><br><span class="line"> top: <span class="string">"data"</span></span><br><span class="line"> top: <span class="string">"label"</span></span><br><span class="line"> include {</span><br><span class="line"> phase: TRAIN</span><br><span class="line"> }</span><br><span class="line"> transform_param {</span><br><span class="line"> scale: <span class="number">0.00390625</span></span><br><span class="line"> }</span><br><span class="line"> data_param {</span><br><span class="line"> source: <span class="string">"../mnist_train_lmdb"</span></span><br><span class="line"> batch_size: <span class="number">64</span></span><br><span class="line"> backend: LMDB</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">.</span><br><span class="line">.</span><br><span class="line">.</span><br><span class="line"></span><br><span class="line">I0424 <span class="number">11</span>:<span class="number">22</span>:<span class="number">48.831621</span> <span class="number">4049</span> solver.cpp:<span class="number">218</span>] Iteration <span class="number">9900</span> (<span class="number">14.7601</span> iter/s, <span class="number">6.</span>775s/<span class="number">100</span> iters), loss = <span class="number">0.00511876</span></span><br><span class="line">I0424 <span class="number">11</span>:<span class="number">22</span>:<span class="number">48.831665</span> <span class="number">4049</span> solver.cpp:<span class="number">237</span>] Train net output #<span class="number">0</span>: loss = <span class="number">0.00511864</span> (* <span class="number">1</span> = <span class="number">0.00511864</span> loss)</span><br><span class="line">I0424 <span class="number">11</span>:<span class="number">22</span>:<span class="number">48.831676</span> <span class="number">4049</span> sgd_solver.cpp:<span class="number">105</span>] Iteration <span class="number">9900</span>, lr = <span class="number">0.00596843</span></span><br><span class="line">I0424 <span class="number">11</span>:<span class="number">22</span>:<span class="number">55.538620</span> <span class="number">4049</span> solver.cpp:<span class="number">447</span>] Snapshotting to binary proto file caffemodel/lenet_iter_10000.caffemodel</span><br><span class="line">I0424 <span class="number">11</span>:<span class="number">22</span>:<span class="number">55.543390</span> <span class="number">4049</span> sgd_solver.cpp:<span class="number">273</span>] Snapshotting solver state to binary proto file caffemodel/lenet_iter_10000.solverstate</span><br><span class="line">I0424 <span class="number">11</span>:<span class="number">22</span>:<span class="number">55.578083</span> <span class="number">4049</span> solver.cpp:<span class="number">310</span>] Iteration <span class="number">10000</span>, loss = <span class="number">0.00350995</span></span><br><span class="line">I0424 <span class="number">11</span>:<span class="number">22</span>:<span class="number">55.578119</span> <span class="number">4049</span> solver.cpp:<span class="number">330</span>] Iteration <span class="number">10000</span>, Testing <span class="title function_">net</span> <span class="params">(#<span class="number">0</span>)</span></span><br><span class="line">I0424 <span class="number">11</span>:<span class="number">22</span>:<span class="number">59.965965</span> <span class="number">4054</span> data_layer.cpp:<span class="number">73</span>] Restarting data prefetching from start.</span><br><span class="line">I0424 <span class="number">11</span>:<span class="number">23</span>:<span class="number">00.153450</span> <span class="number">4049</span> solver.cpp:<span class="number">397</span>] Test net output #<span class="number">0</span>: accuracy = <span class="number">0.9912</span></span><br><span class="line">I0424 <span class="number">11</span>:<span class="number">23</span>:<span class="number">00.153553</span> <span class="number">4049</span> solver.cpp:<span class="number">397</span>] Test net output #<span class="number">1</span>: loss = <span class="number">0.0277065</span> (* <span class="number">1</span> = <span class="number">0.0277065</span> loss)</span><br><span class="line">I0424 <span class="number">11</span>:<span class="number">23</span>:<span class="number">00.153568</span> <span class="number">4049</span> solver.cpp:<span class="number">315</span>] Optimization Done.</span><br><span class="line">I0424 <span class="number">11</span>:<span class="number">23</span>:<span class="number">00.153573</span> <span class="number">4049</span> caffe.cpp:<span class="number">259</span>] Optimization Done.</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>至此,我们就完成了利用Lenet 网络模型在mnist数据集上进行训练,如何评价训练结果呢?我们可以输入一张新的图片,使用刚才训练的模型进行预测,来评价我们训练结果的好坏。</p><h2 id="预测一张新的图片"><a href="#预测一张新的图片" class="headerlink" title="预测一张新的图片"></a>预测一张新的图片</h2><p>假设待预测图片为下图<br><img src="/images/research/caffe/2.png"></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> examples/mnist/test</span><br><span class="line">python mnist_test.py 2.png</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>输出</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br></pre></td><td class="code"><pre><span class="line">pi<span class="meta">@DEEPMIND</span>:~/caffe/examples/mnist/test$ python mnist_test.py test.jpg</span><br><span class="line">WARNING: Logging before <span class="title function_">InitGoogleLogging</span><span class="params">()</span> is written to STDERR</span><br><span class="line">W0424 <span class="number">14</span>:<span class="number">23</span>:<span class="number">46.789387</span> <span class="number">6313</span> _caffe.cpp:<span class="number">139</span>] DEPRECATION WARNING - deprecated use of Python <span class="keyword">interface</span></span><br><span class="line"><span class="title class_">W0424</span> <span class="number">14</span>:<span class="number">23</span>:<span class="number">46.789423</span> <span class="number">6313</span> _caffe.cpp:<span class="number">140</span>] Use <span class="built_in">this</span> <span class="title function_">instead</span> <span class="params">(with the named <span class="string">"weights"</span> parameter)</span>:</span><br><span class="line">W0424 <span class="number">14</span>:<span class="number">23</span>:<span class="number">46.789428</span> <span class="number">6313</span> _caffe.cpp:<span class="number">142</span>] Net(<span class="string">'../train/lenet.prototxt'</span>, <span class="number">1</span>, weights=<span class="string">'../train/caffemodel/lenet_iter_10000.caffemodel'</span>)</span><br><span class="line">I0424 <span class="number">14</span>:<span class="number">23</span>:<span class="number">46.883805</span> <span class="number">6313</span> net.cpp:<span class="number">51</span>] Initializing net from parameters:</span><br><span class="line">name: <span class="string">"LeNet"</span></span><br><span class="line">state {</span><br><span class="line"> phase: TEST</span><br><span class="line"> level: <span class="number">0</span></span><br><span class="line">}</span><br><span class="line">layer {</span><br><span class="line"> name: <span class="string">"data"</span></span><br><span class="line"> type: <span class="string">"Input"</span></span><br><span class="line"> top: <span class="string">"data"</span></span><br><span class="line"> input_param {</span><br><span class="line"> shape {</span><br><span class="line"> dim: <span class="number">64</span></span><br><span class="line"> dim: <span class="number">1</span></span><br><span class="line"> dim: <span class="number">28</span></span><br><span class="line"> dim: <span class="number">28</span></span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line">layer {</span><br><span class="line"> name: <span class="string">"conv1"</span></span><br><span class="line"> type: <span class="string">"Convolution"</span></span><br><span class="line"> bottom: <span class="string">"data"</span></span><br><span class="line"> top: <span class="string">"conv1"</span></span><br><span class="line"> param {</span><br><span class="line"> lr_mult: <span class="number">1</span></span><br><span class="line"> }</span><br><span class="line"> param {</span><br><span class="line"> lr_mult: <span class="number">2</span></span><br><span class="line"> }</span><br><span class="line"> convolution_param {</span><br><span class="line"> num_output: <span class="number">20</span></span><br><span class="line"> kernel_size: <span class="number">5</span></span><br><span class="line"> stride: <span class="number">1</span></span><br><span class="line"> weight_filler {</span><br><span class="line"> type: <span class="string">"xavier"</span></span><br><span class="line"> }</span><br><span class="line"> bias_filler {</span><br><span class="line"> type: <span class="string">"constant"</span></span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">.</span><br><span class="line">.</span><br><span class="line">.</span><br><span class="line"></span><br><span class="line">I0424 <span class="number">14</span>:<span class="number">41</span>:<span class="number">40.851599</span> <span class="number">7883</span> net.cpp:<span class="number">242</span>] This network produces output prob</span><br><span class="line">I0424 <span class="number">14</span>:<span class="number">41</span>:<span class="number">40.851608</span> <span class="number">7883</span> net.cpp:<span class="number">255</span>] Network initialization done.</span><br><span class="line">I0424 <span class="number">14</span>:<span class="number">41</span>:<span class="number">40.854398</span> <span class="number">7883</span> net.cpp:<span class="number">744</span>] Ignoring source layer mnist</span><br><span class="line">I0424 <span class="number">14</span>:<span class="number">41</span>:<span class="number">40.854982</span> <span class="number">7883</span> net.cpp:<span class="number">744</span>] Ignoring source layer loss</span><br><span class="line">[ <span class="number">5.44423534e-11</span> <span class="number">2.36225206e-11</span> <span class="number">1.00000000e+00</span> <span class="number">6.40073061e-09</span></span><br><span class="line"> <span class="number">1.00278713e-18</span> <span class="number">2.31217930e-18</span> <span class="number">2.05065188e-17</span> <span class="number">6.41556852e-09</span></span><br><span class="line"> <span class="number">5.65470171e-10</span> <span class="number">1.42476214e-13</span>]</span><br><span class="line"><span class="number">2</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><p>可以看到网络输出10分类各自的概率,最后取最大的概率所对应的标签作为预测结果,即<code>2</code>。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>通过上面的步骤,我们就完成了一个机器学习的通用步骤,即数据集的预处理、训练网络的定义,训练,预测和评估。</p><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><a href="https://github.com/bvlc/caffe/blob/master/examples/mnist/readme.md">Training LeNet on MNIST with Caffe</a></li><li><a href="http://yann.lecun.com/exdb/lenet/">MNIST Demos on Yann LeCun’s website</a></li></ul>]]></content>
<summary type="html"><p>MNIST 是一个包含各种手写数字(0-9)图片(images)和对应标签(label)的数据集,下面我们将介绍如何利用 <a href="https://github.com/bvlc/caffe/">Caffe</a>框架对手写数字识别一个完整的流程,本实验代码可以<a href="https://github.com/mindcont/caffe/blob/master/examples/mnist">github</a>下载。</p></summary>
<category term="深度学习" scheme="http://blog.mindcont.com/categories/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/"/>
</entry>
<entry>
<title>调试安卓的小技巧</title>
<link href="http://blog.mindcont.com/2017/02/25/debug-android-win/"/>
<id>http://blog.mindcont.com/2017/02/25/debug-android-win/</id>
<published>2017-02-25T01:26:57.000Z</published>
<updated>2018-02-27T02:46:08.393Z</updated>
<content type="html"><![CDATA[<p>在win10下开发安卓小程序使用物理机调试的时候,USB数据线接触不好,总是很容易断开链接,害的处女座的强迫症都要犯了。</p><span id="more"></span><h2 id="使用wifi来调试你的应用"><a href="#使用wifi来调试你的应用" class="headerlink" title="使用wifi来调试你的应用"></a>使用wifi来调试你的应用</h2><h3 id="使用方法"><a href="#使用方法" class="headerlink" title="使用方法"></a>使用方法</h3><p><strong>1.测试手机和开发PC要在同一wifi局域网内</strong></p><table><thead><tr><th></th><th>IP地址</th><th>能否访问Internet</th></tr></thead><tbody><tr><td>PC(开发者)</td><td>192.168.1.123</td><td>是</td></tr><tr><td>测试手机</td><td>192.168.1.100</td><td>是</td></tr></tbody></table><p><strong>2.确保你正确配置了adb(Android Debug Bridge)环境变量</strong></p><p>当你打开命令行,输入’adb version’,看到类似如下信息,就说明adb配置成功</p><p><img src="/images/coding/android/adb.png"></p><p><strong>3.设置手机以侦听端口 5555 上的 TCP/IP 连接</strong><br>第一次的时候需要用手机USB连接到你的电脑,之后运行下面国外大牛写的shell脚本,脚本在mac或者Linux肯定是ok的,windows上需要安装一些如msysgit或者<a href="https://www.cygwin.com/setup-x86.exe">Cygwin</a>才可运行以上Linux shell。</p><p>下载<a href="https://gist.github.com/stormzhang/6fa157ceb7980a25fbf0">adbwifi.sh</a> 放到cygwin 目录下 例如我’C:\cygwin64\home\fenxi\adbwifi.sh’<br>运行</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sh adbwifi.sh</span><br></pre></td></tr></table></figure><p><strong>4. 连接</strong></p><p>断开手机和PC相连的usb数据线</p><p>查找 Android 设备的 IP 地址。例如,在 Nexus 设备上,您可以通过访问 Settings > About tablet(或 About phone) > Status > IP address 查找 IP 地址。例如我的手机地址为’192.168.1.100’,打开命令行,输入</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">adb connect 192.168.1.100</span><br><span class="line"></span><br><span class="line">#查看已连接设备</span><br><span class="line">adb devices</span><br></pre></td></tr></table></figure><p>现在,您可以开始操作了!</p><p><strong>注意:</strong><br>手机重启后需要使用数据线再连接一遍,重复以上步骤才可使用无线调试模式。<br>这属于安卓系统安全策略,不然任何时候局域网内其他PC都可以远程控制你的手机了</p><h2 id="使用dryrun"><a href="#使用dryrun" class="headerlink" title="使用dryrun"></a>使用dryrun</h2><p>github是个大宝藏,对于 Android 开发者来说,除了阅读还有运行 demo 看下项目效果等。</p><p>来看下一般人的阅读开源项目的姿势是怎么样的:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">找到项目地址</span><br><span class="line">点击「download zip」</span><br><span class="line">解压到一个目录</span><br><span class="line">打开 Android Studio</span><br><span class="line">导入项目</span><br><span class="line">Sync gradle</span><br><span class="line">运行项目</span><br><span class="line">选择运行的设备</span><br><span class="line">删除下载的 zip 文件</span><br></pre></td></tr></table></figure><p>只要安装dryrun这个工具,直接执行一个命令:</p><p><img src="/images/coding/android/usage_v4.gif"></p><h3 id="使用方法-1"><a href="#使用方法-1" class="headerlink" title="使用方法"></a>使用方法</h3><p><strong>1.安装ruby</strong><br>这里我推荐使用<a href="http://railsinstaller.org/en">RailsInstaller</a>自动配置好ruby、rails、Devkit等<br>,记得勾选添加到环境变量。</p><p>检查ruby安装是否成功,’ruby -v’</p><p><strong>2.安装dryrun</strong><br><a href="https://github.com/cesarferreira/dryrun">dryrun Try the demo project of any Android Library</a></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">gem install dryrun</span><br></pre></td></tr></table></figure><p><strong>3.运行demo</strong><br>值得注意的是,先用usb连接到手机,这里好像不支持无线调试的方式</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">dryrun [email protected]:cesarferreira/android-helloworld.git</span><br></pre></td></tr></table></figure><p><img src="/images/coding/android/dryrun-success.jpg"></p><p>附上我一张图</p><p><img src="/images/coding/android/hello-world.jpg"></p><h2 id="有用的链接"><a href="#有用的链接" class="headerlink" title="有用的链接"></a>有用的链接</h2><p><a href="http://stormzhang.com/friends/">stormzhang的博客</a><br><a href="http://stormzhang.com/android/2014/08/27/adb-over-wifi/">ANDROID通过WIFI来调试你的应用</a><br><a href="https://developer.android.com/studio/command-line/adb.html">Android 调试桥</a><br><a href="http://stormzhang.com/2016/10/19/how-to-read-and-run-the-demo/">教你一招最屌的阅读开源项目的姿势</a></p>]]></content>
<summary type="html"><p>在win10下开发安卓小程序使用物理机调试的时候,USB数据线接触不好,总是很容易断开链接,害的处女座的强迫症都要犯了。</p></summary>
<category term="coding" scheme="http://blog.mindcont.com/tags/coding/"/>
</entry>
<entry>
<title>给初做科研的一些建议</title>
<link href="http://blog.mindcont.com/2017/02/22/some-advice-for-research-beginners/"/>
<id>http://blog.mindcont.com/2017/02/22/some-advice-for-research-beginners/</id>
<published>2017-02-22T01:19:45.000Z</published>
<updated>2018-02-27T02:46:08.473Z</updated>
<content type="html"><![CDATA[<p>这是我回顾一年多来的研究心得,写给那些初入研究生生涯人的,以求启迪后者,少走些弯路,但从方法论中来说有些弯路是不可逾越的并不会因你看了我的文章而改变。</p><span id="more"></span><p><img src="/images/resources/do-research.jpg"></p><p align="right">--图片来源 wikihow</p><p>一个东西不理解,很陌生,我们可以通过一种方法去尝试着研究它,去解剖它。但怎样去解剖呢?</p><p>我想一个人,能做的对自己的研究方向和自己所研究的问题有清晰的理解,并能通过搜索加学习,自己给出该问题的一个答案或者一个不错的结果,那就是搞科研去了门,也下了一定的功夫了。</p><h3 id="了解问题的性质"><a href="#了解问题的性质" class="headerlink" title="了解问题的性质"></a>了解问题的性质</h3><p>先了解自己研究的是什么问题?<br>结合自己的志趣,实验室主攻方向,就业等,去寻找一个结合小点作为自己的研究方向,比如实验室做机器人,而你想做计算机视觉,那能不能做机器人场景下,一些物体的识别,检测,诸如此类</p><p>有什么实际作用?<br>如自然语言处理可以去机器翻译,计算机视觉可以结合安防,结合工业机器人的机械臂,结合自动驾驶中人,灯,车复杂车况的处理,多传感器融合</p><p>心理要清楚,研究它有什么用,有什么价值</p><h3 id="问题的解决方法"><a href="#问题的解决方法" class="headerlink" title="问题的解决方法"></a>问题的解决方法</h3><p>有几种解决方法的思路?<br>对于要研究的问题,有几种处理方法,国内外的</p><p>从点到面的寻找资源?<br>从顶级论文中选论文,从大局入手,先看他做了什么,取得了什么结果,用什么方法做的,不要着眼于具体的公式推导,你可能说无法理解他的算法,我们这一步不需要理解算法,只需要找到他的算法思想,以及他如何产生的这种思想</p><p>再看看他引用的文章,大牛论文的引用都是干货,能不能找到一些代码和demo,从点到面,顺藤摸瓜,逐渐的对这个问题有几种处理方法,以及他们之间又是如何改进的你会有一个概念</p><p>而后才是反过来,看具体的算法实现,具体的公式,适量就好,资质不足,看不明白也不要紧,有了思想,再找代码,结合代码看数据的输入和输出,数据的处理流程,实验的设计与结果的评估</p><p>这样从点,到思想,到更多的思想和方法,再到一篇完整的思想和代码实现,完整的实验设计和处理流程,你就有了清晰的理解。</p><p>当然这是凭国内的搜索引擎,你可能搜不到你想要的东西,这也是我下面想说的</p><h3 id="学会搜索"><a href="#学会搜索" class="headerlink" title="学会搜索"></a>学会搜索</h3><p>学会使用谷歌<br>google +对问题描述英文的关键词<br>一个好的搜索引擎,加上对问题恰当的关键词,能快速得到你想要的,所需的资料</p><p>谷歌学术也很好,人物加年份,加方向<br>(研究点)关键词</p><h3 id="思维碰撞"><a href="#思维碰撞" class="headerlink" title="思维碰撞"></a>思维碰撞</h3><p>我觉得研究生就是应该相互讨论,一个好实验室的氛围大抵如此。<br>思想相互碰撞,实践</p><h3 id="下工夫"><a href="#下工夫" class="headerlink" title="下工夫"></a>下工夫</h3><p>最重要也是最后说的,<br>就是多下功夫,避免效率低下,高效的使用时间,并行的处理事情</p><p>最后,祝愿大家都能通过研究生阶段的学习,有所收获,有所启发。</p><h2 id="有用的链接"><a href="#有用的链接" class="headerlink" title="有用的链接"></a>有用的链接</h2><ul><li><a href="http://www.wikihow.com/Main-Page">wikihow - how to do anything</a></li><li><a href="https://www.coursera.org/learn/chuangxin-siwei/lecture/GDsGk/3-6-ru-he-kuai-su-liao-jie-ge-ling-yu">如何快速了解一个领域</a></li><li><a href="http://www.uanswer.me/?/question/508">如何写好研究生小论文?</a></li></ul>]]></content>
<summary type="html"><p>这是我回顾一年多来的研究心得,写给那些初入研究生生涯人的,以求启迪后者,少走些弯路,但从方法论中来说有些弯路是不可逾越的并不会因你看了我的文章而改变。</p></summary>
<category term="随笔日记" scheme="http://blog.mindcont.com/categories/%E9%9A%8F%E7%AC%94%E6%97%A5%E8%AE%B0/"/>
</entry>
<entry>
<title>2016 , 我的年终总结</title>
<link href="http://blog.mindcont.com/2017/02/16/my-review-2016/"/>
<id>http://blog.mindcont.com/2017/02/16/my-review-2016/</id>
<published>2017-02-16T08:27:20.000Z</published>
<updated>2018-02-27T02:46:08.441Z</updated>
<content type="html"><![CDATA[<p>转眼间,24岁我的本命年如风卷云涌般飘了过去,总感觉日子过得飞快,一不留神一年就过去了,也才想着趁现在做做年终总结,回顾一下自己的2016,并给2017的自己:heart:<strong>订个小目标</strong>:heart: 。</p><span id="more"></span><h2 id="比赛篇-muscle"><a href="#比赛篇-muscle" class="headerlink" title="比赛篇:muscle:"></a>比赛篇:muscle:</h2><h3 id="解魔方"><a href="#解魔方" class="headerlink" title="解魔方"></a>解魔方</h3><p>2016年寒假刚过:monkey:,我就早早地来了学校,为年前和兵哥和恒参加的一个比赛做最后的工作,并争取去珠海参加总决赛。当时做的是一个解三阶魔方的机器人,各自分工,队长兵哥做的最多,从机械结构的设计,到蓝牙模块通信,还有解算算法的优化,我和恒哥则打打下手,总算在比赛截止日提交了作品。<br><img src="/images/resources/20160306.jpg"><br>比赛方又要微信组织投票(朋友圈里小到幼儿园小朋友演出,大到省市优秀青年评选都喜欢微信投票:joy:)计入所谓的大众评分:alien:。</p><p>4月初,我们如愿以偿的:airplane:广州,兵哥带我去了华南理工见到了景海,我们围着华工转了转,传统的建筑和现代的教学楼,湖水给人的感觉很有气息,来来往往的学生和周围的环境很协调。之后我们转车到了珠海,安排入住,比赛展示和答辩,一切顺乎自然。比赛后,主办方全志科技的副总裁带我们参观了公司大楼,也给我们分享了他的创业历程,公司的定位和产品上下游链条以及公司未来的思考方向等等,总得感觉深圳和珠海的电子行业有实力也比其他地区有得天独厚的优势。</p><p>这次珠海行,对我的启发很大,无论从比赛本身还是眼界的扩展:joy:</p><h3 id="BOT计算机视觉"><a href="#BOT计算机视觉" class="headerlink" title="BOT计算机视觉"></a>BOT计算机视觉</h3><p>9月份,实验室的小涛告诉我BOT 有个计算机视觉的比赛,初赛是图片分类,让计算机预测新图片这个是猫还是狗,是选手利用卷积神经网络配合比赛主办方提供的数据集进行训练和预测,正好我们可以练练手。在余下的一个月时间里,我们就开始了不停训练、预测、提交的流程。那时候我们使用的NVIDIA K2200 4g 的显卡,用caffe 来做训练。印象中那一个月就是等待训练结果,然后下载新的预测集进行预测,提交和等待排名更新。最好的一次在12种分类中我们达到80%几,然后最高的已经到97%识别正确率了,结果显而易见我们没有进入复赛。</p><p>至于收获嘛,大体就是尝试将自己对卷积网络的理解,caffe平台的搭建,数据集的处理和网络构建和训练,最后部署预测,整个流程做了一遍。之后就是除比赛之外,我搞科研的故事了或者说我的研究方向的确定(听起来好屌的样子:laughing:)。</p><h2 id="科研篇-punch"><a href="#科研篇-punch" class="headerlink" title="科研篇:punch:"></a>科研篇:punch:</h2><p>比赛回来,转眼到了5月份,自己就开始选定研究方向了。一开始我打算利用 Kinect识别人体动作,然后和Nao robot 进行人机交互。嗯,就是打算做下面这种效果,<strong>机器人和人做同样的动作</strong>。蒽,对,我们实验室有Nao robot。</p><img src="/images/resources/kinect-nao.jpg" width="720" ><p>大体的思路是:kinect 输出人体关节点,计算机将人体的动作转化为Nao robot 各个关节电机参数,利用nao robot提供的API 驱动它。</p><p>之后我就顺着这个思路开始,先了解微软官方提供的Kinect v2 sdk 到他们的<a href="https://mva.microsoft.com/zh-cn/training-courses/-kinect-for-windows-v2--8743?l=15BQDzV1_4504984382">讲解视频</a>,然后又搜相关的开源程序和代码,慢慢得就到了<a href="https://structure.io/openni">OpenNI</a> 和 <a href="https://openkinect.org/wiki/Main_Page/zh-hans">openKinect</a> ,由于是 kinect v2 版本,所以当时颇费周章的弄,逐渐弄到了ubuntu平台下。下面是使用 ubuntu 下配合<a href="https://github.com/OpenKinect/libfreenect2">libfreenect2</a>成功读取到了信息。:poop:<br><img src="/images/resources/openkinect_v2_ubuntu.png"></p><p>后面越做发现自己的编程能力不够,尤其涉及linux下 c和 c++ 相互调用还有视频的缩放和处理部分帧的问题,越往后越多的问题发现。看来一个人做不下去了,然后转变思路,就想基于depth image 做一些东西,后面就搜到了 <a href="http://vision.princeton.edu/people/shurans/">Shuran Song</a> 的<a href="http://videolectures.net/eccv2014_song_depth_images/">室内场景下的3D 目标检测</a>。根据她开放的数据集和代码,运行了demo如下</p><p><img src="/images/resources/reproduce-shuransong-results.jpg"></p><p>还是没思路,7月份的时候,慢慢得就走向了 <a href="http://cs231n.stanford.edu/">卷积人工神经网络</a> 和 <a href="http://blog.mindcont.com/2017/02/15/caffe-guide-book/">Caffe: a fast open framework for deep learning</a>,就是用深度学习的方法去解决视觉方面的一些问题。先是安装 caffe,然后读了目标检测方面一些论文,动手实践了<a href="https://github.com/ShaoqingRen/faster_rcnn">faster-rcnn</a>、<a href="http://pjreddie.com/darknet/yolo/">YoLo</a>、<a href="https://github.com/weiliu89/caffe/tree/ssd">SSD</a>等。下面是faster-rcnn 当时运行的demo</p><p><img src="/images/resources/faster-rcnn.png"></p><p>9月份-10月份 参加了上海BOT大数据应用大赛是国内首个专业化AI大赛,“计算机视觉” 类的题目,见上面第二个比赛。11月初就开始弄开题报告,当时定的题目是<strong>复杂场景下的交通信号灯识别研究</strong>。思路是:近年来卷积神经网络方面一些新的网络模型和传统的图形学方法模板匹配和色域转换相结合来解决这个问题,其中清华大学<a href="http://cg.cs.tsinghua.edu.cn/traffic-sign/">朱哲</a>博士的论文<a href="http://cg.cs.tsinghua.edu.cn/traffic-sign/0682.pdf">Traffic-Sign Detection and Classification in the Wild</a>给了我很大的启发,多次向他发邮件,都给予了回答和解释在此向他表示感谢。</p><p>下面是两个当时答辩做的PPT<br><img src="/images/resources/tlr-research-status.jpg"></p><p>拟研究思路,可能有理论问题,不要被我带入坑:stuck_out_tongue_winking_eye:<br><img src="/images/resources/idea-of-traffic-signal-recognition.jpg"></p><p>答辩完,我们组组长zhou老大说这个问题和实验室大方向不符合:joy:,让我换到人体姿态估计上,类似下面这种识别人体姿势的效果,于是我就开始了这方面的学习:dog:。</p><img src="/images/resources/amdo2012andriluka.jpg" align="right" width="720"><p align="right">图片来源 Brown University Computer Science</p><h2 id="小目标-baby-chick-baby-chick-baby-chick"><a href="#小目标-baby-chick-baby-chick-baby-chick" class="headerlink" title="小目标:baby_chick::baby_chick::baby_chick:"></a>小目标:baby_chick::baby_chick::baby_chick:</h2><p>2017 年的钟声又响啦,和全国人民一样撸起袖子,加油干。先立个flag吧,先定它个小目标。</p><ul><li><input checked="" disabled="" type="checkbox"> 弄出实验结果:frog:</li><li><input checked="" disabled="" type="checkbox"> 发表文章,完成毕业要求:penguin:</li><li><input checked="" disabled="" type="checkbox"> 早睡,早起,要锻炼:ant:</li><li><input checked="" disabled="" type="checkbox"> 补充短板,找实习:wolf:</li><li><input checked="" disabled="" type="checkbox"> 提高博客质量:whale2:</li><li><input checked="" disabled="" type="checkbox"> 维护主网站,找准特色,极客范:palm_tree:</li></ul><p><strong>现在是2017年2月17号 15点20分,坐在保守估计7万块电脑旁写下了这篇文章,马上就会更新上去了</strong>:smiley:</p><h2 id="引用"><a href="#引用" class="headerlink" title="引用"></a>引用</h2><p><a href="http://www.webpagefx.com/tools/emoji-cheat-sheet/">EMOJI CHEAT SHEET</a></p><p>作者:<a href="https://github.com/mindcont">mindcont</a> 2017-02-17 第一次编辑<br><strong>转载注明出处 <a href="http://blog.mindcont.com/2017/02/16/my-review-2016/">http://blog.mindcont.com/2017/02/16/my-review-2016/</a></strong></p>]]></content>
<summary type="html"><p>转眼间,24岁我的本命年如风卷云涌般飘了过去,总感觉日子过得飞快,一不留神一年就过去了,也才想着趁现在做做年终总结,回顾一下自己的2016,并给2017的自己:heart:<strong>订个小目标</strong>:heart: 。</p></summary>
<category term="随笔日记" scheme="http://blog.mindcont.com/categories/%E9%9A%8F%E7%AC%94%E6%97%A5%E8%AE%B0/"/>
</entry>
<entry>
<title>值得传播的思想</title>
<link href="http://blog.mindcont.com/2017/02/15/ideas-worth-spreading/"/>
<id>http://blog.mindcont.com/2017/02/15/ideas-worth-spreading/</id>
<published>2017-02-15T08:50:13.000Z</published>
<updated>2018-01-09T02:31:08.803Z</updated>
<content type="html"><![CDATA[<p>倾听来自全球各行业人的所思所感,从科学家、企业家、政治家、艺术家,抑或是自由职业者,公益人士的演讲,仿佛漫天璀璨的繁星照亮我们的世界。认识到不同种族,不同国界、不同宗教以及在它们交织之下人们的生活和误解,学会包容它们。一手握着历史,一手看着现在,周天罗宇就在我们的思想里。</p><span id="more"></span><p><img src="https://s3-eu-west-1.amazonaws.com/images.fespa.com/ted-Luther-King.jpg"></p><h2 id="TED"><a href="#TED" class="headerlink" title="TED"></a>TED</h2><p>TED(指Technology, Entertainment 和Design的英文缩写)是全球最大,最具影响力的演讲平台。TED讲师是来自全球各行业的领军人物,包括科学家,企业家,政治家,艺术家等。<a href="https://www.ted.com/">https://www.ted.com</a></p><p>伟大演讲的奥秘 | TED总教头Chris Anderson<br><object width="640" height="400"><param name="movie" value="http://swf.ws.126.net/openplayer/v02/-0-2_MBLAG3QFA_MBLAGECJN-vimg1_ws_126_net//image/snapshot_movie/2016/5/J/O/MBLAGECJO-1423031805654.swf?isTEDPlay=1"></param><param name="allowScriptAccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="http://swf.ws.126.net/openplayer/v02/-0-2_MBLAG3QFA_MBLAGECJN-vimg1_ws_126_net//image/snapshot_movie/2016/5/J/O/MBLAGECJO-1423031805654.swf?isTEDPlay=1" type="application/x-shockwave-flash" width="640" height="360" allowFullScreen="true" wmode="transparent" allowScriptAccess="always"></embed></object></p><p>用超级计算机构造大脑<br><object width="640" height="400"><param name="movie" value="http://swf.ws.126.net/openplayer/v02/-0-2_M7A12OCLQ_M7A132PK2-vimg1_ws_126_net//image/snapshot_movie/2013/11/F/V/M9DP571FV-1423031805654.swf?isTEDPlay=1"></param><param name="allowScriptAccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="http://swf.ws.126.net/openplayer/v02/-0-2_M7A12OCLQ_M7A132PK2-vimg1_ws_126_net//image/snapshot_movie/2013/11/F/V/M9DP571FV-1423031805654.swf?isTEDPlay=1" type="application/x-shockwave-flash" width="640" height="360" allowFullScreen="true" wmode="transparent" allowScriptAccess="always"></embed></object></p><p>李飞飞:如何教计算机理解图片<br><object width="640" height="400"><param name="movie" value="http://swf.ws.126.net/openplayer/v02/-0-2_MAKN9A24M_MAKN9QAQR-vimg1_ws_126_net//image/snapshot_movie/2015/3/Q/Q/MAKN9Q1QQ-1423031805654.swf?isTEDPlay=1"></param><param name="allowScriptAccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="http://swf.ws.126.net/openplayer/v02/-0-2_MAKN9A24M_MAKN9QAQR-vimg1_ws_126_net//image/snapshot_movie/2015/3/Q/Q/MAKN9Q1QQ-1423031805654.swf?isTEDPlay=1" type="application/x-shockwave-flash" width="640" height="360" allowFullScreen="true" wmode="transparent" allowScriptAccess="always"></embed></object></p><p>Linux 操作系统之父 | Linus Torvalds<br><object width="640" height="400"><param name="movie" value="http://swf.ws.126.net/openplayer/v02/-0-2_MBPNHJU6K_MBR358639-vimg1_ws_126_net//image/snapshot_movie/2016/7/3/A/MBR35863A-1423031805654.swf?isTEDPlay=1"></param><param name="allowScriptAccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="http://swf.ws.126.net/openplayer/v02/-0-2_MBPNHJU6K_MBR358639-vimg1_ws_126_net//image/snapshot_movie/2016/7/3/A/MBR35863A-1423031805654.swf?isTEDPlay=1" type="application/x-shockwave-flash" width="640" height="480" allowFullScreen="true" wmode="transparent" allowScriptAccess="always"></embed></object></p><p>谷歌创始人展示谷歌眼镜<br><object width="640" height="400"><param name="movie" value="http://swf.ws.126.net/openplayer/v02/-0-2_M8VU1HC4K_M8VU1OJSV-vimg1_ws_126_net//image/snapshot_movie/2013/6/Q/A/M8VU1OFQA-1423031805654.swf?isTEDPlay=1"></param><param name="allowScriptAccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="http://swf.ws.126.net/openplayer/v02/-0-2_M8VU1HC4K_M8VU1OJSV-vimg1_ws_126_net//image/snapshot_movie/2013/6/Q/A/M8VU1OFQA-1423031805654.swf?isTEDPlay=1" type="application/x-shockwave-flash" width="640" height="360" allowFullScreen="true" wmode="transparent" allowScriptAccess="always"></embed></object></p><p>用每一个灯泡传输无线信号<br><object width="640" height="400"><param name="movie" value="http://swf.ws.126.net/openplayer/v02/-0-2_M84Q05PLI_M84Q08V5P-vimg1_ws_126_net//image/snapshot_movie/2013/11/A/G/M9DOS4GAG-1423031805654.swf?isTEDPlay=1"></param><param name="allowScriptAccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="http://swf.ws.126.net/openplayer/v02/-0-2_M84Q05PLI_M84Q08V5P-vimg1_ws_126_net//image/snapshot_movie/2013/11/A/G/M9DOS4GAG-1423031805654.swf?isTEDPlay=1" type="application/x-shockwave-flash" width="640" height="360" allowFullScreen="true" wmode="transparent" allowScriptAccess="always"></embed></object></p><p>巧妙地观察人类<br><object width="640" height="400"><param name="movie" value="http://swf.ws.126.net/openplayer/v02/-0-2_M7929LSTQ_M792A9M8H-vimg1_ws_126_net//image/snapshot_movie/2013/11/R/Q/M9DP53ORQ-1423031805654.swf?isTEDPlay=1"></param><param name="allowScriptAccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="http://swf.ws.126.net/openplayer/v02/-0-2_M7929LSTQ_M792A9M8H-vimg1_ws_126_net//image/snapshot_movie/2013/11/R/Q/M9DP53ORQ-1423031805654.swf?isTEDPlay=1" type="application/x-shockwave-flash" width="640" height="360" allowFullScreen="true" wmode="transparent" allowScriptAccess="always"></embed></object></p><h2 id="一席|人文-科技-白日梦"><a href="#一席|人文-科技-白日梦" class="headerlink" title="一席|人文.科技.白日梦"></a>一席|人文.科技.白日梦</h2><p>听君一席话,胜读十年书。(Get Inspired) 一席鼓励分享见解、体验和对未来的想象,做有价值的传播。<br><a href="http://www.yixi.tv/">http://www.yixi.tv</a></p><p>胡玮炜 | “膜拜”单车<br><embed src='http://player.youku.com/player.php/sid/XMTg3NjMwMjkxMg==/v.swf' allowFullScreen='true' quality='high' width='640' height='400' align='middle' allowScriptAccess='always' type='application/x-shockwave-flash'></embed></p><p>宁博 | 未来农业会是什么样<br><embed src='http://player.youku.com/player.php/sid/XMTg1MjAyNTA1Ng==/v.swf' allowFullScreen='true' quality='high' width='640' height='400' align='middle' allowScriptAccess='always' type='application/x-shockwave-flash'></embed></p><p>青山周平 | 未来的家<br><embed src='http://player.youku.com/player.php/sid/XMTczMDkzOTU5Mg==/v.swf' allowFullScreen='true' quality='high' width='640' height='400' align='middle' allowScriptAccess='always' type='application/x-shockwave-flash'></embed></p><p>肖全 | 我们这一代<br><embed src='http://player.youku.com/player.php/sid/XMTYxMTIyNTA0MA==/v.swf' allowFullScreen='true' quality='high' width='640' height='400' align='middle' allowScriptAccess='always' type='application/x-shockwave-flash'></embed></p><h2 id="「一刻talks」"><a href="#「一刻talks」" class="headerlink" title="「一刻talks」"></a>「一刻talks」</h2><p>「一刻talks」正在邀请世界上的思想领袖与实干家来分享他们的事业、故事创意和想法,这些来自世界各地不同领域的专业人才和深藏不露的绝妙素人,将带来极具前瞻性的话题,把思想精华浓缩在15分钟,讲述知识与创意的精髓,碰撞思想的火花。目前已累积1500则以上的精彩演讲,主题包罗万象,科学家、艺术家、哲学家、探险家、心理学家、商业领袖等各路有想法的人纷纷登台,观点“响亮”,要给世界一点言色!<br><a href="http://www.yiketalks.com/">http://www.yiketalks.com/</a></p><p>剪线钳<br><object width=1190 height=513><param name="movie" value="//share.vrs.sohu.com/my/v.swf&topBar=1&id=87364082&autoplay=false&from=page"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="wmode" value="Transparent"></param><embed width=640 height=400 wmode="Transparent" allowfullscreen="true" allowscriptaccess="always" quality="high" src="//share.vrs.sohu.com/my/v.swf&topBar=1&id=87364082&autoplay=false&from=page" type="application/x-shockwave-flash"/></embed></object></p><p>能解开一切魔方的简单诀窍<br><object width=1190 height=513><param name="movie" value="//share.vrs.sohu.com/my/v.swf&topBar=1&id=87421281&autoplay=false&from=page"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="wmode" value="Transparent"></param><embed width=640 height=400 wmode="Transparent" allowfullscreen="true" allowscriptaccess="always" quality="high" src="//share.vrs.sohu.com/my/v.swf&topBar=1&id=87421281&autoplay=false&from=page" type="application/x-shockwave-flash"/></embed></object></p><h2 id="感谢"><a href="#感谢" class="headerlink" title="感谢"></a>感谢</h2><p><a href="www.ted.com">TED: Ideas worth spreading</a><br><a href="open.163.com">网易公开课 | 传播属于全人类的知识和智慧</a><br><a href="www.yixi.tv">一席|人文.科技.白日梦</a><br><a href="http://www.yiketalks.com/">一刻talks 思想好声音·全球创见者分享平台</a></p>]]></content>
<summary type="html"><p>倾听来自全球各行业人的所思所感,从科学家、企业家、政治家、艺术家,抑或是自由职业者,公益人士的演讲,仿佛漫天璀璨的繁星照亮我们的世界。认识到不同种族,不同国界、不同宗教以及在它们交织之下人们的生活和误解,学会包容它们。一手握着历史,一手看着现在,周天罗宇就在我们的思想里。</p></summary>
<category term="随笔日记" scheme="http://blog.mindcont.com/categories/%E9%9A%8F%E7%AC%94%E6%97%A5%E8%AE%B0/"/>
</entry>
<entry>
<title>Caffe 入门指南</title>
<link href="http://blog.mindcont.com/2017/02/15/caffe-guide-book/"/>
<id>http://blog.mindcont.com/2017/02/15/caffe-guide-book/</id>
<published>2017-02-15T08:22:46.000Z</published>
<updated>2018-01-09T02:17:55.758Z</updated>
<content type="html"><![CDATA[<p><img src="/images/research/caffe/caffe.jpg"></p><span id="more"></span><h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><p><a href="http://caffe.berkeleyvision.org/">Caffe</a>是一个清晰而高效的深度学习的框架,其作者是博士毕业于UC Berkeley的<a href="http://daggerfs.com/">贾扬清</a>,目前在Google工作。<br><a href="http://caffe.berkeleyvision.org/">Caffe</a>是纯粹的C++/CUDA架构,支持命令行、Python和MATLAB接口;可以在CPU和GPU54直接无缝切换:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Caffe::set_mode(Caffe::GPU);</span><br></pre></td></tr></table></figure><p><strong>Caffe的优势</strong></p><ul><li>上手快:模型与相应优化都是以文本形式而非代码形式给出。</li><li>Caffe给出了模型的定义、最优化设置以及预训练的权重,方便立即上手。</li><li>速度快:能够运行最棒的模型与海量的数据。</li><li>Caffe与cuDNN结合使用,测试AlexNet模型,在K40上处理每张图片只需要1.17ms.</li><li>模块化:方便扩展到新的任务和设置上。</li><li>可以使用Caffe提供的各层类型来定义自己的模型。</li><li>开放性:公开的代码和参考模型用于再现。</li><li>社区好:可以通过BSD-2参与开发与讨论。</li></ul><p><a href="https://caffe2.ai/">Caffe2</a> 一个新的轻量级,模块化和可扩展的深度学习框架,由 NVIDIA和Facebook团队重新打造并在<a href="https://github.com/caffe2/caffe2">github</a>上开源,Caffe2允许开发人员和研究人员创建大规模分布式训练场景和构建边缘设备机器学习应用。</p><h2 id="入门篇"><a href="#入门篇" class="headerlink" title="入门篇"></a>入门篇</h2><p>推荐先阅读<a href="http://www.cnblogs.com/mengfanrong/p/5169548.html">一文读懂机器学习</a></p><p>前期入门主要根据自己的机器(nvidia显卡)完成Caffe 的安装,运行 <a href="http://caffe.berkeleyvision.org/">Caffe官网</a>和 <a href="https://github.com/bvlc/caffe">github</a> repo 上的<strong>例程</strong>。</p><h3 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h3><p>安装请仔细阅读下面的中文教程,<strong>编译中遇到的错误</strong>请在 github issues用英文仔细查看错误原因。而且大部分都是<strong>环境依赖,路径错误</strong>。</p><ul><li><a href="http://blog.mindcont.com/2016/07/20/ubuntu1404-caffe-r3-cuda7-5-mkl/">Ubuntu 14.04 64bit + Caffe rc3 + CUDA 7.5 + Intel MKL 配置说明</a></li><li><a href="http://caffe.berkeleyvision.org/installation.html">Installation</a></li><li><a href="https://github.com/bvlc/caffe/issues">issues</a></li></ul><h3 id="例程"><a href="#例程" class="headerlink" title="例程"></a>例程</h3><p>配合官方文档 例如mnist 手写体识别,其文档在 $CAFFE_ROOT/examples/mnist/Readme.md ,运行并理解其流程。尤其以下面几个最为重要,当细细品味。</p><table><thead><tr><th>例程名</th><th>实现</th><th>学习意义</th></tr></thead><tbody><tr><td>LeNet MNIST</td><td><a href="https://blog.mindcont.com/2017/04/25/how-to-do-mnist-demo/">手写数字识别</a></td><td>理解模型</td></tr><tr><td>CaffeNet C++ Classification example</td><td>c++ 代码实现图片分类</td><td>理解如何用c++ 调用caffe</td></tr><tr><td>Fine-tuning for style recognition</td><td>根据自己数据集微调模型</td><td>迁移学习,构建自己数据集,微调模型</td></tr><tr><td>Web demo</td><td>基于web 网页的图片分类</td><td>如何构建 client /server</td></tr></tbody></table><h3 id="入门书籍"><a href="#入门书籍" class="headerlink" title="入门书籍"></a>入门书籍</h3><p>如果链接失效,可以访问 <a href="https://cloud.mindcont.com/d/34d8cdb853a54a2d90d3/?p=/ai/caffe%E5%85%A5%E9%97%A8&mode=list">https://share.mindcont.com</a> 获取。</p><ul><li><a href="http://pan.baidu.com/s/1c0Ri2Py#path=%252FCaffeCN%25E7%25BF%25BB%25E8%25AF%2591">Caffe 官方教程中译本</a></li><li><a href="https://book.douban.com/subject/26825082/">深度学习21天实战Caffe-赵永科</a></li><li><a href="https://cloud.mindcont.com/d/34d8cdb853a54a2d90d3/files/?p=/ai/caffe%E5%85%A5%E9%97%A8/caffe%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0.pdf">薛开宇-caffe学习笔记</a></li><li><a href="http://pan.baidu.com/s/1hq8IoHe">贾扬清-DIY Deep Learning for Vision- a Hands-On Tutorial with Caffe</a></li></ul><h3 id="答疑社区"><a href="#答疑社区" class="headerlink" title="答疑社区"></a>答疑社区</h3><ul><li><a href="http://caffecn.cn/">Caffe 中文社区</a></li><li><a href="">Caffe 深度学习交流2群 534492004</a></li><li><a href="https://gitter.im/BVLC/caffe">Caffe 讨论组</a></li><li><a href="http://valser.org/">Valse 视觉与学习青年研讨会</a></li><li><a href="">VALSE-D群 481109645</a></li><li><a href="http://valser.org/article-86-1.html">历次VALSE Webinar活动的录像</a></li></ul><h2 id="进阶篇"><a href="#进阶篇" class="headerlink" title="进阶篇"></a>进阶篇</h2><p>这里推荐一个很好的实践入门教程,使用python 和 caffe 进行了一个完整的流程,内容详实,可谓理论与实践兼备,不可多得。</p><ul><li><a href="http://adilmoujahid.com/posts/2016/06/introduction-deep-learning-python-caffe/">A Practical Introduction to Deep Learning with Caffe and Python</a></li><li><a href="https://blog.mindcont.com/2017/01/05/machine-learning-for-software-engineers/">自上而下的学习路线-软件工程师的机器学习</a></li></ul><h3 id="应用"><a href="#应用" class="headerlink" title="应用"></a>应用</h3><h4 id="视觉方向"><a href="#视觉方向" class="headerlink" title="视觉方向"></a>视觉方向</h4><p>视觉方面大致有针对图像的分类、分割(Segmentation)、理解(caption),超分辨,去噪去模糊,以及针对物体的目标识别、检测和追踪。还有就是对视频信息进行同样的工作追求实时和可用。</p><table><thead><tr><th>图片分类</th><th>–</th></tr></thead><tbody><tr><td><a href="https://github.com/terrychenism/ResNeXt">ResNet-v3</a></td><td><a href="https://github.com/terrychenism/ResNeXt">https://github.com/terrychenism/ResNeXt</a></td></tr><tr><td><a href="https://github.com/liuzhuang13/DenseNet">denseNet</a></td><td><a href="https://github.com/liuzhuang13/DenseNet">https://github.com/liuzhuang13/DenseNet</a></td></tr><tr><td><a href="https://github.com/KaimingHe/deep-residual-networks">Deep Residual Networks</a></td><td><a href="https://github.com/KaimingHe/deep-residual-networks">https://github.com/KaimingHe/deep-residual-networks</a></td></tr><tr><td><a href="https://github.com/flukeskywalker/highway-networks">Highway Networks</a></td><td><a href="https://github.com/flukeskywalker/highway-networks">https://github.com/flukeskywalker/highway-networks</a></td></tr><tr><td><a href="https://github.com/songhan/Deep-Compression-AlexNet">Deep-Compression-AlexNet</a></td><td><a href="https://github.com/songhan/Deep-Compression-AlexNet">https://github.com/songhan/Deep-Compression-AlexNet</a></td></tr><tr><td><a href="https://github.com/DeepScale/SqueezeNet">SqueezeNet</a></td><td><a href="https://github.com/DeepScale/SqueezeNet">https://github.com/DeepScale/SqueezeNet</a></td></tr><tr><td><a href="https://github.com/lim0606/caffe-googlenet-bn">GoogleNet-V2</a></td><td><a href="https://github.com/lim0606/caffe-googlenet-bn">https://github.com/lim0606/caffe-googlenet-bn</a></td></tr></tbody></table><table><thead><tr><th>目标检测</th><th>–</th></tr></thead><tbody><tr><td><a href="https://github.com/sanghoon/pva-faster-rcnn">PVANet</a></td><td><a href="https://github.com/sanghoon/pva-faster-rcnn">https://github.com/sanghoon/pva-faster-rcnn</a></td></tr><tr><td><a href="https://github.com/Orpine/py-R-FCN">R-FCN</a></td><td><a href="https://github.com/Orpine/py-R-FCN">https://github.com/Orpine/py-R-FCN</a></td></tr><tr><td><a href="https://github.com/weiliu89/caffe/tree/ssd">SSD: Single Shot MultiBox Detector</a></td><td><a href="https://github.com/weiliu89/caffe/tree/ssd">https://github.com/weiliu89/caffe/tree/ssd</a></td></tr><tr><td><a href="https://github.com/xingwangsfu/caffe-yolo">YOLO in caffe</a></td><td><a href="https://github.com/xingwangsfu/caffe-yolo">https://github.com/xingwangsfu/caffe-yolo</a></td></tr><tr><td><a href="https://github.com/weichengkuo/DeepBox">DeepBox</a></td><td><a href="https://github.com/weichengkuo/DeepBox">https://github.com/weichengkuo/DeepBox</a></td></tr><tr><td><a href="https://github.com/rbgirshick/py-faster-rcnn">Faster R-CNN</a></td><td><a href="https://github.com/rbgirshick/py-faster-rcnn">https://github.com/rbgirshick/py-faster-rcnn</a></td></tr><tr><td><a href="https://github.com/rbgirshick/fast-rcnn">Fast R-CNN</a></td><td><a href="https://github.com/rbgirshick/fast-rcnn">https://github.com/rbgirshick/fast-rcnn</a></td></tr></tbody></table><h4 id="自然语言处理"><a href="#自然语言处理" class="headerlink" title="自然语言处理"></a>自然语言处理</h4><p>将机器学习用于语音文本,词汇方面的工作,典型应用机器翻译。</p><ul><li><a href="https://github.com/Russell91/nlpcaffe">NLP-Caffe</a></li><li><a href="http://city.shaform.com/blog/2015/06/06/caffe-sentiment-analysis.html">Sentiment Analysis</a></li></ul><h4 id="语音"><a href="#语音" class="headerlink" title="语音"></a>语音</h4><p>这里是指语言片段的识别,拼接,以及仿声合成,典型语音识别,也就是科大讯飞所作的工作。</p><ul><li><a href="https://github.com/pannous/caffe-speech-recognition">Speech Recognition</a></li><li><a href="https://github.com/kaldi-asr/kaldi">Kaldi</a></li><li><a href="http://www.xfyun.cn/index.php/default/doccenter/doccenterInner?itemTitle=anN3ZA==">技术文档-讯飞</a></li></ul><p>更多访问 <a href="https://github.com/MichaelXin/Awesome-Caffe">MichaelXin - Awesome-Caffe</a></p><h3 id="CS231N-课程"><a href="#CS231N-课程" class="headerlink" title="CS231N 课程"></a>CS231N 课程</h3><p>有了前面的初步了解,认识了什么是深度学习,什么是caffe,怎么使用caffe,以及caffe能够干什么,想要进一步的学习还要了解卷积神经网络的前世今生。我推荐斯坦福大学的CS231N 课程作为卷积神经网络的系统学习。</p><ul><li><a href="http://cs231n.stanford.edu/">CS231n: Convolutional Neural Networks for Visual Recognition</a></li><li><a href="http://pan.baidu.com/s/1pKsTivp">视频和课件</a></li><li><a href="http://cs231n.stanford.edu/project.html">课程资源</a></li><li><a href="http://blog.csdn.net/dinosoft/article/details/51813615">深度学习斯坦福cs231n 课程笔记</a></li><li><a href="https://zhuanlan.zhihu.com/intelligentunit?topic=%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%EF%BC%88Deep%20Learning%EF%BC%89">智能单元-深度学习-cs231n 中文笔记</a></li><li><a href="http://deeplearning.stanford.edu/wiki/index.php/UFLDL%E6%95%99%E7%A8%8B">UFLDL教程</a></li><li><a href="http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=MachineLearning">Machine Learning</a></li></ul><h3 id="数据集"><a href="#数据集" class="headerlink" title="数据集"></a>数据集</h3><p>机器学习有人工标注数据的监督学习也好,没有人工标注数据的无监督学习以及介于两者之间的半监督学习也好,归根结底离不开大量的数据,基于各种各样场景下的问题性质,大家构建了相应的人工标注的数据集,一部分用于网络训练,让机器进行学习,另一部分用来做测试评价学习效果的好坏。</p><p>鉴于各式各样的数据集种类繁多,此部分单独列为一个页面,请参考下面的链接。</p><ul><li><a href="http://blog.mindcont.com/2016/09/13/Deep-learning-dataset/">深度学习:数据集篇</a></li></ul><p>标注工具</p><ul><li><a href="https://github.com/tzutalin/labelImg">LabelImg</a></li><li><a href="https://github.com/puzzledqs/BBox-Label-Tool">BBox-Label-Tool</a></li><li><a href="https://github.com/christopher5106/FastAnnotationTool">FastAnnotationTool</a></li></ul><h3 id="博客"><a href="#博客" class="headerlink" title="博客"></a>博客</h3><p>推荐一些好的博客,工程方面能让你解决某个具体问题能有所启发,而学术方面则可以让你紧跟业界最新潮流,这其中又分为学者个人的博客和著名科研单位的博客。</p><p>工程方面</p><ul><li><a href="http://tech.meituan.com/mt-mlinaction-how-to-ml.html">实例详解机器学习如何解决问题</a></li><li><a href="http://www.cnblogs.com/louyihang-loves-baiyan/">楼燚(yì)航的blog</a></li><li><a href="http://blog.csdn.net/liumaolincycle/article/category/5705161">liumaolincycle的博客</a></li><li><a href="http://www.cnblogs.com/denny402">denny的学习专栏</a></li><li><a href="https://console.faceplusplus.com/documents/5679308">Face++ -API</a></li></ul><p>学术探索<br>个人</p><ul><li><a href="http://www.rossgirshick.info/">Ross Girshick - Facebook AI Research</a></li><li><a href="http://www.ee.cuhk.edu.hk/~xgwang/">Xiaogang Wang - CUHK</a></li><li><a href="http://cs.stanford.edu/people/karpathy/">Andrej Karpathy - Stanford Computer Science Ph.D. student</a></li><li><a href="http://rodrigob.github.io/#code">Rodrigo Benenson</a></li></ul><p>单位和组织</p><ul><li><a href="http://www.valser.org/">视觉与学习青年学者研讨会</a></li><li><a href="http://vision.ouc.edu.cn/valse/">历次活动录像下载地址</a></li><li><a href="http://www.cv-foundation.org/openaccess/menu.py">CVPR</a></li><li><a href="https://zhuanlan.zhihu.com/dlclass">深度学习大讲堂</a></li><li><a href="https://www.jiqizhixin.com/">机器之心</a></li><li><a href="https://memect.com/">机器学习日报</a></li><li><a href="https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/">Berkeley Computer Vision Group</a></li><li><a href="http://vision.stanford.edu/">Stanford Vision Lab</a></li><li><a href="http://vision.princeton.edu/">Princeton Vision & Robotics Labs</a></li><li><a href="http://www.robots.ox.ac.uk/~parg/home">Oxford - Information Engineering</a></li><li><a href="https://ps.is.tuebingen.mpg.de/publications">Max Planck Institute for Intelligent Systems</a></li><li><a href="https://openai.com/blog/">OpenAI</a></li></ul><p>竞赛</p><ul><li><a href="https://www.kaggle.com/">kaggle</a></li><li><a href="https://tianchi.aliyun.com/">阿里云天池</a></li></ul><h3 id="微调网络"><a href="#微调网络" class="headerlink" title="微调网络"></a>微调网络</h3><ul><li><a href="http://www.cnblogs.com/louyihang-loves-baiyan/p/5038758.html">楼燚(yì)航的blog-Caffe fine-tuning 微调网络</a></li><li><a href="http://blog.csdn.net/sinat_30071459/article/details/51613304">小咸鱼_-基于caffe的图像分类(1)——制作train.txt和val.txt文件</a></li></ul><h3 id="可视化"><a href="#可视化" class="headerlink" title="可视化"></a>可视化</h3><p>用反卷积的方法对自己的网络的各个卷积层进行可视化,能更好的理解你的网络每层学习到那些特征,思考到网络可能进入了哪些误区。</p><ul><li>deep-visualization-toolbox <a href="https://github.com/yosinski/deep-visualization-toolbox">code</a> <a href="http://arxiv.org/abs/1506.06579">paper</a></li><li><a href="https://github.com/auduno/deepdraw">DeepDraw</a></li><li><a href="http://ethereon.github.io/netscope/#/editor">netscope</a></li></ul><h3 id="全卷积-FCN"><a href="#全卷积-FCN" class="headerlink" title="全卷积(FCN)"></a>全卷积(FCN)</h3><p>FCN将传统CNN中的全连接层转化成一个个的卷积层。在传统的CNN结构中,前5层是卷积层,第6层和第7层分别是一个长度为4096的一维向量,第8层是长度为1000的一维向量,分别对应1000个类别的概率。FCN将这3层表示为卷积层,卷积核的大小(通道数,宽,高)分别为(4096,1,1)、(4096,1,1)、(1000,1,1)。所有的层都是卷积层,故称为全卷积网络。</p><ul><li><a href="http://blog.csdn.net/taigw/article/details/51401448">全卷积网络(FCN)与图像分割</a></li><li><a href="https://zhuanlan.zhihu.com/p/22976342">FCN学习:Semantic Segmentation</a></li></ul><h3 id="扩展新layer"><a href="#扩展新layer" class="headerlink" title="扩展新layer"></a>扩展新layer</h3><p>加入一个新的层,满足自己的实际需求,最常见的就是修改 数据输入层DataLayer,增加一个新的、特殊的数据类型,也对应你特殊的数据处理方式,例如对图像进行每隔几度进行旋转,resize、crop、使用光流图像等。也可以换种思路看看别人是如何增加一个新的Layer的,从中获得启发。</p><ul><li><a href="http://blog.csdn.net/sunshine_in_moon/article/details/51453951">Sunshine_in_Moon的专栏-Caffe扩展新层</a></li></ul><h2 id="高级篇"><a href="#高级篇" class="headerlink" title="高级篇"></a>高级篇</h2><h3 id="调参"><a href="#调参" class="headerlink" title="调参"></a>调参</h3><p>深度学习,卷积神经网络莫过于一个适应于数据集规模,能够反映问题本质的网络,剩下的就是调参的事情了,无外乎实践,实践,再实践。当然机器很重要,好的机器,好的显卡,意味着快速迭代!机器不够用也没关系,那就要把理论功夫做足,参考成熟的网络设计,再前人的工作基础之上fine-tuning,往往比你自己训练要好的多。使用image-net数据集训练得到的caffemodel 就是一个很好的权值初始化参数。</p><ul><li><a href="https://www.zhihu.com/question/41631631/answer/94816420">你有哪些deep learning(rnn、cnn)调参的经验?</a></li></ul><p>构造网络</p><ul><li><a href="https://github.com/jay-mahadeokar/pynetbuilder">pynetbuilder</a></li></ul><h3 id="转化"><a href="#转化" class="headerlink" title="转化"></a>转化</h3><ul><li><a href="https://github.com/ethereon/caffe-tensorflow">caffe-tensorflow</a></li><li><a href="https://github.com/kitofans/caffe-theano-conversion">caffe-theano-conversion</a></li><li><a href="https://github.com/MarcBS/keras">CaffeToKeras</a></li></ul><h3 id="分布式计算"><a href="#分布式计算" class="headerlink" title="分布式计算"></a>分布式计算</h3><ul><li><a href="https://github.com/amplab/SparkNet">SparkNet</a></li><li><a href="https://github.com/yahoo/CaffeOnSpark">CaffeOnSpark</a></li><li><a href="https://github.com/petuum/bosen">petuum/bosen </a></li></ul><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><a href="http://daggerfs.com/">Yangqing Jia (贾扬清)</a></li><li><a href="http://image-net.org/">Image Net</a></li><li><a href="https://github.com/MichaelXin/Awesome-Caffe">MichaelXin - Awesome-Caffe</a></li></ul><p>作者:<a href="https://github.com/mindcont">mindcont</a> 2016-08-22 第一次编辑 2017-02-16 第二次编辑<br><strong>转载注明出处 <a href="http://blog.mindcont.com/2016/08/22/caffe-guide-book/">http://blog.mindcont.com/2016/08/22/caffe-guide-book/</a></strong></p>]]></content>
<summary type="html"><p><img src="/images/research/caffe/caffe.jpg"></p></summary>
<category term="深度学习" scheme="http://blog.mindcont.com/categories/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/"/>
<category term="caffe" scheme="http://blog.mindcont.com/tags/caffe/"/>
</entry>
<entry>
<title>自上而下的学习路线-软件工程师的机器学习</title>
<link href="http://blog.mindcont.com/2017/01/05/machine-learning-for-software-engineers/"/>
<id>http://blog.mindcont.com/2017/01/05/machine-learning-for-software-engineers/</id>
<published>2017-01-05T00:43:44.000Z</published>
<updated>2017-07-27T11:22:40.373Z</updated>
<content type="html"><![CDATA[<p>灵感来源于 <a href="https://github.com/jwasham/google-interview-university/blob/master/translations/README-cn.md">谷歌面试学习手册</a></p><blockquote><ul><li>原文地址:<a href="https://github.com/ZuzooVn/machine-learning-for-software-engineers">Machine Learning for Software Engineers</a></li></ul></blockquote><ul><li>原文作者:<a href="https://github.com/ZuzooVn">ZuzooVn(Nam Vu)</a></li><li>翻译:<a href="https://github.com/lsvih">lsvih</a></li></ul><h2 id="这是?"><a href="#这是?" class="headerlink" title="这是?"></a>这是?</h2><p>这是本人为期数月的学习计划。我正要从一名移动端软件开发者(自学,无计科文凭)转型成为一名机器学习工程师。</p><p>我的主要目标是找到一种以实践为主的学习方法,并为初学者抽象掉大多数的数学概念。<br>这种学习方法是非传统的,因为它是专门为软件工程师所设计的自上而下、以结果为导向的学习方法。</p><p>如果您想让它更好的话,随时欢迎您的贡献。</p><hr><h2 id="目录"><a href="#目录" class="headerlink" title="目录"></a>目录</h2><ul><li><a href="#%E8%BF%99%E6%98%AF">这是?</a></li><li><a href="#%E4%B8%BA%E4%BD%95%E8%A6%81%E7%94%A8%E5%88%B0%E5%AE%83">为何要用到它?</a></li><li><a href="#%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%AE%83">如何使用它?</a></li><li><a href="#follow-me">Follow me</a></li><li><a href="#%E5%88%AB%E8%AE%A4%E4%B8%BA%E8%87%AA%E5%B7%B1%E4%B8%8D%E5%A4%9F%E8%81%AA%E6%98%8E">别认为自己不够聪明</a></li><li><a href="#%E5%85%B3%E4%BA%8E%E8%A7%86%E9%A2%91%E8%B5%84%E6%BA%90">关于视频资源</a></li><li><a href="#%E9%A2%84%E5%A4%87%E7%9F%A5%E8%AF%86">预备知识</a></li><li><a href="#%E6%AF%8F%E6%97%A5%E8%AE%A1%E5%88%92">每日计划</a></li><li><a href="#%E5%8A%A8%E6%9C%BA">动机</a></li><li><a href="#%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E6%A6%82%E8%AE%BA">机器学习概论</a></li><li><a href="#%E6%8E%8C%E6%8F%A1%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0">掌握机器学习</a></li><li><a href="#%E6%9C%89%E8%B6%A3%E7%9A%84%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0">有趣的机器学习</a></li><li><a href="#%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%AE%80%E4%BB%8B">机器学习简介</a></li><li><a href="#%E4%B8%80%E6%9C%AC%E6%B7%B1%E5%85%A5-%E9%9D%9E%E6%8A%80%E6%9C%AF%E7%9A%84%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E6%8C%87%E5%8D%97">一本深入,非技术的机器学习指南</a></li><li><a href="#%E6%95%85%E4%BA%8B%E4%B8%8E%E7%BB%8F%E9%AA%8C">故事与经验</a></li><li><a href="#%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%AE%97%E6%B3%95">机器学习算法</a></li><li><a href="#%E5%85%A5%E9%97%A8%E4%B9%A6%E7%B1%8D">入门书籍</a></li><li><a href="#%E5%AE%9E%E7%94%A8%E4%B9%A6%E7%B1%8D">实用书籍</a></li><li><a href="#kaggle%E7%9F%A5%E8%AF%86%E7%AB%9E%E8%B5%9B">Kaggle知识竞赛</a></li><li><a href="#%E7%B3%BB%E5%88%97%E8%A7%86%E9%A2%91">系列视频</a></li><li><a href="#mooc">MOOC</a></li><li><a href="#%E8%B5%84%E6%BA%90">资源</a></li><li><a href="#%E6%88%90%E4%B8%BA%E4%B8%80%E5%90%8D%E5%BC%80%E6%BA%90%E8%B4%A1%E7%8C%AE%E8%80%85">成为一名开源贡献者</a></li><li><a href="#%E6%B8%B8%E6%88%8F">游戏</a></li><li><a href="#%E6%92%AD%E5%AE%A2">播客</a></li><li><a href="#%E7%A4%BE%E5%8C%BA">社区</a></li><li><a href="#%E9%9D%A2%E8%AF%95%E9%97%AE%E9%A2%98">面试问题</a></li><li><a href="#%E6%88%91%E5%B4%87%E6%8B%9C%E7%9A%84%E5%85%AC%E5%8F%B8">我崇拜的公司</a></li></ul><hr><h2 id="为何要用到它?"><a href="#为何要用到它?" class="headerlink" title="为何要用到它?"></a>为何要用到它?</h2><p>我会为了我未来的工作————机器学习工程师 遵循这份计划。自2011年以来,我一直进行着移动端应用的开发(包括安卓、iOS与黑莓)。我有软件工程的文凭,但没有计算机科学的文凭。我仅仅在大学的时候学习过一点基础科学,包括微积分、线性代数、离散数学、概率论与统计。<br>我认真思考过我在机器学习方面的兴趣:</p><ul><li><a href="https://www.quora.com/Can-I-learn-and-get-a-job-in-Machine-Learning-without-studying-CS-Master-and-PhD">我能在没有计科硕士、博士文凭的情况下找到一份关于机器学习的工作吗?</a><ul><li>你当然可以,但是我想进入这个领域则无比艰难。</li></ul></li><li><a href="https://www.quora.com/How-do-I-get-a-job-in-Machine-Learning-as-a-software-programmer-who-self-studies-Machine-Learning-but-never-has-a-chance-to-use-it-at-work">我是一名软件工程师,我自学了机器学习,我如何在没有相关经验的情况下找到一份关于机器学习的工作?</a><ul><li>我正在为我的团队招聘机器学习专家,但你的MOOC并不会给你带来工作机会。事实上,大多数机器学习方向的硕士也并不会得到工作机会,因为他们(与大多数上过MOOC的人一样)并没有深入地去理解。他们都没法帮助我的团队解决问题。</li></ul></li><li><a href="http://programmers.stackexchange.com/questions/79476/what-skills-are-needed-for-machine-learning-jobs">找一份机器学习相关的工作需要掌握怎样的技能?</a><ul><li>首先,你得有正儿八经的计科或数学专业背景。ML是一个比较先进的课题,大多数的教材都会直接默认你有以上背景。其次,机器学习是一个集成了许多子专业的奇技淫巧的课题,你甚至会想看看MS的机器学习课程,去看看他们的授课、课程和教材。</li><li>统计,假设,分布式计算,然后继续统计。</li></ul></li></ul><p>我深陷困境。</p><p>据我所知, <a href="http://machinelearningmastery.com/programmers-can-get-into-machine-learning/">机器学习有两个方向</a>:</p><ul><li>实用机器学习: 这个方向主要是查询数据库、数据清洗、写脚本来转化数据,把算法和库结合起来再加上一些定制化的代码,从数据中挤出一些准确的答案来证明一些困难且模糊不清的问题。实际上它非常混乱。</li><li>理论机器学习: 这个方向主要是关于数学、抽象、理想状况、极限条件、典型例子以及一切可能的特征。这个方向十分的干净、整洁,远离混乱的现实。</li></ul><p>我认为对于以实践为主的人来说,做好的方法就是 <a href="http://machinelearningmastery.com/machine-learning-for-programmers/#comment-358985">“练习–学习–练习”</a>,这意味着每个学生一开始就能参与一些现有项目与一些问题,并练习(解决)它们以熟悉传统的方法是怎么做的。在有了一些简单的练习经验之后,他们就可以开始钻进书里去学习理论知识。这些理论知识将帮助他们在将来进行更进一步的训练,充实他们解决实际问题的工具箱。学习理论知识还会加深他们对那些简单练习的理解,帮助他们更快地获得进阶的经验。</p><p>这是一个很长的计划,它花去了我一年的时间。如果你已经对它有所了解了,它将会让你省去很多时间。</p><h2 id="如何使用它?"><a href="#如何使用它?" class="headerlink" title="如何使用它?"></a>如何使用它?</h2><p>以下的内容全部是概要,你需要从上往下来解决这些项目。</p><p>我使用的是Github独特的flavored markdown的任务列表来检查我计划的进展。</p><ul><li><input checked="" disabled="" type="checkbox"> 创建一个新的分支,然后你可以这样来标出你已经完成的项目,只需要在框中填写一个x即可:[x]</li></ul><p><a href="https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown">了解更多有关 Github-flavored markdown的知识</a></p><h2 id="Follow-me"><a href="#Follow-me" class="headerlink" title="Follow me"></a>Follow me</h2><p>我是一名非常非常想去美国工作的越南软件工程师。</p><p>我在这份计划中花多少时间?在每天的艰辛工作完成后,每晚花4小时。</p><p>我已经在实现梦想的旅途中了。</p><ul><li>Twitter: <a href="https://twitter.com/zuzoovn">@Nam Vu</a></li></ul><table><thead><tr><th align="center"><img src="http://sv1.upsieutoc.com/2016/10/08/331f241c8da44d0c43e9324d55440db6.md.jpg" alt="Nam Vu - Top-down learning path: machine learning for software engineers"></th></tr></thead><tbody><tr><td align="center">USA as heck</td></tr></tbody></table><h2 id="别认为自己不够聪明"><a href="#别认为自己不够聪明" class="headerlink" title="别认为自己不够聪明"></a>别认为自己不够聪明</h2><p>当我打开书本,发现他们告诉我多元微积分、统计与推理、线性代数是学习机器学习的先决条件的时候,我非常沮丧。因为我不知道从哪儿开始…</p><ul><li><a href="http://machinelearningmastery.com/what-if-im-not-good-at-mathematics/">我数学不好怎么办</a></li><li><a href="http://machinelearningmastery.com/techniques-to-understand-machine-learning-algorithms-without-the-background-in-mathematics/">没有数学专业背景而理解机器学习算法的5种技巧</a></li><li><a href="https://www.quora.com/Machine-Learning/How-do-I-learn-machine-learning-1">我是如何学习机器学习的?</a></li></ul><h2 id="关于视频资源"><a href="#关于视频资源" class="headerlink" title="关于视频资源"></a>关于视频资源</h2><p>部分视频只有在Coursera、EdX的课程注册了才能观看。虽然是免费的,但有些时间段这些课程并不开放,你可能需要等上一段时间(可能是好几个月)。我将会加上更多的公开的视频源来代替这些在线课程的视频。我很喜欢大学的讲座。</p><h2 id="预备知识"><a href="#预备知识" class="headerlink" title="预备知识"></a>预备知识</h2><p>这个小章节是一些在每日计划开始前我想去了解的一些预备知识与一些有趣的信息。</p><ul><li><input disabled="" type="checkbox"> <a href="https://www.quora.com/What-is-the-difference-between-Data-Analytics-Data-Analysis-Data-Mining-Data-Science-Machine-Learning-and-Big-Data-1">Data Analytics,Data Analysis,数据挖掘,数据科学,机器学习,大数据的区别是什么?</a></li><li><input disabled="" type="checkbox"> <a href="https://www.coursera.org/learn/learning-how-to-learn">学习如何去学习</a></li><li><input disabled="" type="checkbox"> <a href="http://lifehacker.com/281626/jerry-seinfelds-productivity-secret">不要斩断锁链</a></li><li><input disabled="" type="checkbox"> <a href="https://metacademy.org/roadmaps/rgrosse/learn_on_your_own">如何自学</a></li></ul><h2 id="每日计划"><a href="#每日计划" class="headerlink" title="每日计划"></a>每日计划</h2><p>每个主题都不需要用一整天来完全理解它们,你可以每天完成它们中的多个。</p><p>每天我都会从下面的列表中选一个出来,一遍又一遍的读,做笔记,练习,用Python或R语言实现它。</p><h1 id="动机"><a href="#动机" class="headerlink" title="动机"></a>动机</h1><ul><li><input disabled="" type="checkbox"> <a href="https://www.youtube.com/watch?v=g-jwWYX7Jlo">梦</a></li></ul><h2 id="机器学习概论"><a href="#机器学习概论" class="headerlink" title="机器学习概论"></a>机器学习概论</h2><ul><li><input disabled="" type="checkbox"> <a href="http://www.r2d3.us/visual-intro-to-machine-learning-part-1/">形象的机器学习简介</a></li><li><input disabled="" type="checkbox"> <a href="https://blog.monkeylearn.com/a-gentle-guide-to-machine-learning/">一份温柔的机器学习指南</a></li><li><input disabled="" type="checkbox"> <a href="http://blog.algorithmia.com/introduction-machine-learning-developers/">为开发者准备的机器学习简介</a></li><li><input disabled="" type="checkbox"> <a href="https://www.analyticsvidhya.com/blog/2015/06/machine-learning-basics/">菜鸟的机器学习基础</a></li><li><input disabled="" type="checkbox"> <a href="https://www.quora.com/How-do-you-explain-Machine-Learning-and-Data-Mining-to-non-Computer-Science-people">你如何向非计算机专业的人来解释机器学习与数据挖掘?</a></li><li><input disabled="" type="checkbox"> <a href="https://georgemdallas.wordpress.com/2013/06/11/big-data-data-mining-and-machine-learning-under-the-hood/">在罩子下的机器学习,博文简单明了地介绍了机器学习的原理</a></li><li><input disabled="" type="checkbox"> <a href="https://www.youtube.com/watch?v=elojMnjn4kk&list=PL5-da3qGB5ICeMbQuqbbCOQWcS6OYBr5A&index=1">机器学习是什么?它是如何工作的呢?</a></li><li><input disabled="" type="checkbox"> <a href="http://www.slideshare.net/AlfredPong1/deep-learning-a-nontechnical-introduction-69385936">深度学习——一份非技术性的简介</a></li></ul><h2 id="掌握机器学习"><a href="#掌握机器学习" class="headerlink" title="掌握机器学习"></a>掌握机器学习</h2><ul><li><input disabled="" type="checkbox"> <a href="http://machinelearningmastery.com/machine-learning-mastery-method/">掌握机器学习的方法</a></li><li><input disabled="" type="checkbox"> <a href="http://machinelearningmastery.com/machine-learning-for-programmers/">程序员的机器学习</a></li><li><input disabled="" type="checkbox"> <a href="http://machinelearningmastery.com/start-here/">掌握并运用机器学习</a></li><li><input disabled="" type="checkbox"> <a href="http://machinelearningmastery.com/python-machine-learning-mini-course/">Python机器学习小课程</a></li><li><input disabled="" type="checkbox"> <a href="http://machinelearningmastery.com/machine-learning-algorithms-mini-course/">机器学习算法小课程</a></li></ul><h2 id="有趣的机器学习"><a href="#有趣的机器学习" class="headerlink" title="有趣的机器学习"></a>有趣的机器学习</h2><ul><li><input disabled="" type="checkbox"> <a href="https://medium.com/@ageitgey/machine-learning-is-fun-80ea3ec3c471#.37ue6caww">机器学习真有趣!</a></li><li><input disabled="" type="checkbox"> <a href="https://medium.com/@ageitgey/machine-learning-is-fun-part-2-a26a10b68df3#.kh7qgvp1b">Part 2: 使用机器学习来创造超级马里奥的关卡</a></li><li><input disabled="" type="checkbox"> <a href="https://medium.com/@ageitgey/machine-learning-is-fun-part-3-deep-learning-and-convolutional-neural-networks-f40359318721#.44rhxy637">Part 3: 深度学习与卷积神经网络</a></li><li><input disabled="" type="checkbox"> <a href="https://medium.com/@ageitgey/machine-learning-is-fun-part-4-modern-face-recognition-with-deep-learning-c3cffc121d78#.3rwmq0ddc">Part 4: 现代人脸识别与深度学习</a></li><li><input disabled="" type="checkbox"> <a href="https://medium.com/@ageitgey/machine-learning-is-fun-part-5-language-translation-with-deep-learning-and-the-magic-of-sequences-2ace0acca0aa#.wyfthap4c">Part 5: 翻译与深度学习和序列的魔力</a></li><li><input disabled="" type="checkbox"> <a href="https://medium.com/@ageitgey/machine-learning-is-fun-part-6-how-to-do-speech-recognition-with-deep-learning-28293c162f7a#.lhr1nnpcy">Part 6: 如何使用深度学习进行语音识别</a></li></ul><h2 id="机器学习简介-用手指沾上墨水来书写机器学习简介"><a href="#机器学习简介-用手指沾上墨水来书写机器学习简介" class="headerlink" title="机器学习简介(用手指沾上墨水来书写机器学习简介)"></a><a href="https://triskell.github.io/2016/11/15/Inky-Machine-Learning.html">机器学习简介</a>(用手指沾上墨水来书写机器学习简介)</h2><ul><li><input disabled="" type="checkbox"> <a href="https://triskell.github.io/2016/10/23/What-is-Machine-Learning.html">Part 1 : 什么是机器学习?</a></li><li><input disabled="" type="checkbox"> <a href="https://triskell.github.io/2016/11/13/Supervised-Learning-and-Unsupervised-Learning.html">Part 2 : 监督学习与非监督学习</a></li></ul><h2 id="一本深入、非技术性的机器学习指南"><a href="#一本深入、非技术性的机器学习指南" class="headerlink" title="一本深入、非技术性的机器学习指南"></a>一本深入、非技术性的机器学习指南</h2><ul><li><input disabled="" type="checkbox"> <a href="http://www.innoarchitech.com/machine-learning-an-in-depth-non-technical-guide/">概述,目标,学习类型和算法</a></li><li><input disabled="" type="checkbox"> <a href="http://www.innoarchitech.com/machine-learning-an-in-depth-non-technical-guide-part-2/">数据的选择,准备与建模</a></li><li><input disabled="" type="checkbox"> <a href="http://www.innoarchitech.com/machine-learning-an-in-depth-non-technical-guide-part-3/">模型的评估,验证,复杂性与改进</a></li><li><input disabled="" type="checkbox"> <a href="http://www.innoarchitech.com/machine-learning-an-in-depth-non-technical-guide-part-4/">模型性能与误差分析</a></li><li><input disabled="" type="checkbox"> <a href="http://www.innoarchitech.com/machine-learning-an-in-depth-non-technical-guide-part-5/">无监督学习,相关领域与实践中的机器学习</a></li></ul><h2 id="故事与经验"><a href="#故事与经验" class="headerlink" title="故事与经验"></a>故事与经验</h2><ul><li><input disabled="" type="checkbox"> <a href="https://medium.com/learning-new-stuff/machine-learning-in-a-week-a0da25d59850#.tk6ft2kcg">一周的机器学习</a></li><li><input disabled="" type="checkbox"> <a href="https://medium.com/learning-new-stuff/machine-learning-in-a-year-cdb0b0ebd29c#.hhcb9fxk1">一年的机器学习</a></li><li><input disabled="" type="checkbox"> <a href="http://blog.adnansiddiqi.me/how-i-wrote-my-first-machine-learning-program-in-3-days/">我是如何在3天内写出我的第一个机器学习程序的</a></li><li><input disabled="" type="checkbox"> <a href="https://www.analyticsvidhya.com/learning-path-learn-machine-learning/">学习路径:你成为机器学习专家的导师</a></li><li><input disabled="" type="checkbox"> <a href="https://backchannel.com/you-too-can-become-a-machine-learning-rock-star-no-phd-necessary-107a1624d96b#.g9p16ldp7">不是PhD你也可以成为机器学习的摇滚明星</a></li><li><input disabled="" type="checkbox"> 如何6个月成为一名数据科学家:一名黑客的职业规划<ul><li><a href="https://www.youtube.com/watch?v=rIofV14c0tc">视频</a></li><li><a href="http://www.slideshare.net/TetianaIvanova2/how-to-become-a-data-scientist-in-6-months">幻灯片</a></li></ul></li><li><input disabled="" type="checkbox"> <a href="http://blog.udacity.com/2016/04/5-skills-you-need-to-become-a-machine-learning-engineer.html">5个你成为机器学习工程师必须要掌握的技能</a></li><li><input disabled="" type="checkbox"> <a href="https://www.quora.com/Are-you-a-self-taught-machine-learning-engineer-If-yes-how-did-you-do-it-how-long-did-it-take-you">你是一个自学成才的机器学习工程师吗?你是怎么做的?花了多长时间?</a></li><li><input disabled="" type="checkbox"> <a href="https://www.quora.com/How-can-one-become-a-good-machine-learning-engineer">一个人如何成为一名优秀的机器学习工程师?</a></li><li><input disabled="" type="checkbox"> <a href="http://karlrosaen.com/ml/">一个关注于机器学习的学术假期</a></li></ul><h2 id="机器学习算法"><a href="#机器学习算法" class="headerlink" title="机器学习算法"></a>机器学习算法</h2><ul><li><input disabled="" type="checkbox"> <a href="https://www.analyticsvidhya.com/blog/2015/12/10-machine-learning-algorithms-explained-army-soldier/">用“士兵”来表示10种机器学习算法</a></li><li><input disabled="" type="checkbox"> <a href="https://rayli.net/blog/data/top-10-data-mining-algorithms-in-plain-english/">Top10的数据挖掘算法</a></li><li><input disabled="" type="checkbox"> <a href="http://blog.aylien.com/10-machine-learning-terms-explained-in-simple/">介绍10种机器学习的术语</a></li><li><input disabled="" type="checkbox"> <a href="http://machinelearningmastery.com/a-tour-of-machine-learning-algorithms/">机器学习算法之旅</a></li><li><input disabled="" type="checkbox"> <a href="https://gab41.lab41.org/the-10-algorithms-machine-learning-engineers-need-to-know-f4bb63f5b2fa#.ofc7t2965">机器学习工程师需要知道的10种算法</a></li><li><input disabled="" type="checkbox"> <a href="http://www.dataschool.io/comparing-supervised-learning-algorithms/">比较监督学习算法</a></li><li><a href="https://github.com/rushter/MLAlgorithms">收集的最简化、可执行的机器学习算法</a></li></ul><h2 id="入门书籍"><a href="#入门书籍" class="headerlink" title="入门书籍"></a>入门书籍</h2><ul><li><input disabled="" type="checkbox"> <a href="https://www.amazon.com/Data-Smart-Science-Transform-Information/dp/111866146X">Data Smart: Using Data Science to Transform Information into Insight 1st Edition</a></li><li><input disabled="" type="checkbox"> <a href="https://www.amazon.com/Data-Science-Business-Data-Analytic-Thinking/dp/1449361323/">Data Science for Business: What you need to know about data mining and data analytic-thinking</a></li><li><input disabled="" type="checkbox"> <a href="https://www.amazon.com/Predictive-Analytics-Power-Predict-Click/dp/1118356853">Predictive Analytics: The Power to Predict Who Will Click, Buy, Lie, or Die</a></li></ul><h2 id="实用书籍"><a href="#实用书籍" class="headerlink" title="实用书籍"></a>实用书籍</h2><ul><li><input disabled="" type="checkbox"> <a href="https://www.amazon.com/Machine-Learning-Hackers-Drew-Conway/dp/1449303714">Machine Learning for Hackers</a><ul><li><a href="https://github.com/johnmyleswhite/ML_for_Hackers">GitHub repository(R)</a></li><li><a href="https://github.com/carljv/Will_it_Python">GitHub repository(Python)</a></li></ul></li><li><input disabled="" type="checkbox"> <a href="https://www.amazon.com/Python-Machine-Learning-Sebastian-Raschka-ebook/dp/B00YSILNL0">Python Machine Learning</a><ul><li><a href="https://github.com/rasbt/python-machine-learning-book">GitHub repository</a></li></ul></li><li><input disabled="" type="checkbox"> <a href="https://www.amazon.com/Programming-Collective-Intelligence-Building-Applications-ebook/dp/B00F8QDZWG">Programming Collective Intelligence: Building Smart Web 2.0 Applications</a></li><li><input disabled="" type="checkbox"> <a href="https://www.amazon.com/Machine-Learning-Algorithmic-Perspective-Recognition/dp/1466583282">Machine Learning: An Algorithmic Perspective, Second Edition</a><ul><li><a href="https://github.com/alexsosn/MarslandMLAlgo">GitHub repository</a></li><li><a href="http://seat.massey.ac.nz/personal/s.r.marsland/MLbook.html">Resource repository</a></li></ul></li><li><input disabled="" type="checkbox"> <a href="http://shop.oreilly.com/product/0636920030515.do">Introduction to Machine Learning with Python: A Guide for Data Scientists</a><ul><li><a href="https://github.com/amueller/introduction_to_ml_with_python">GitHub repository</a></li></ul></li><li><input disabled="" type="checkbox"> <a href="https://www.amazon.com/Data-Mining-Practical-Techniques-Management/dp/0123748569">Data Mining: Practical Machine Learning Tools and Techniques, Third Edition</a><ul><li>Teaching material<ul><li><a href="http://www.cs.waikato.ac.nz/ml/weka/Slides3rdEd_Ch1-5.zip">Slides for Chapters 1-5 (zip)</a></li><li><a href="http://www.cs.waikato.ac.nz/ml/weka/Slides3rdEd_Ch6-8.zip">Slides for Chapters 6-8 (zip)</a></li></ul></li></ul></li><li><input disabled="" type="checkbox"> <a href="https://www.amazon.com/Machine-Learning-Action-Peter-Harrington/dp/1617290181/">Machine Learning in Action</a><ul><li><a href="https://github.com/pbharrin/machinelearninginaction">GitHub repository</a></li></ul></li><li><input disabled="" type="checkbox"> <a href="https://www.manning.com/books/reactive-machine-learning-systems">Reactive Machine Learning Systems(MEAP)</a><ul><li><a href="https://github.com/jeffreyksmithjr/reactive-machine-learning-systems">GitHub repository</a></li></ul></li><li><input disabled="" type="checkbox"> <a href="http://www-bcf.usc.edu/~gareth/ISL/">An Introduction to Statistical Learning</a><ul><li><a href="http://www-bcf.usc.edu/~gareth/ISL/code.html">GitHub repository(R)</a></li><li><a href="https://github.com/JWarmenhoven/ISLR-python">GitHub repository(Python)</a><br> - <a href="http://www.dataschool.io/15-hours-of-expert-machine-learning-videos/">视频</a></li></ul></li><li><input disabled="" type="checkbox"> <a href="https://www.packtpub.com/big-data-and-business-intelligence/building-machine-learning-systems-python">Building Machine Learning Systems with Python</a><ul><li><a href="https://github.com/luispedro/BuildingMachineLearningSystemsWithPython">GitHub repository</a></li></ul></li><li><input disabled="" type="checkbox"> <a href="https://www.packtpub.com/big-data-and-business-intelligence/learning-scikit-learn-machine-learning-python">Learning scikit-learn: Machine Learning in Python</a><ul><li><a href="https://github.com/gmonce/scikit-learn-book">GitHub repository</a></li></ul></li><li><input disabled="" type="checkbox"> <a href="https://camdavidsonpilon.github.io/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/">Probabilistic Programming & Bayesian Methods for Hackers</a></li><li><input disabled="" type="checkbox"> <a href="https://www.amazon.com/Probabilistic-Graphical-Models-Principles-Computation/dp/0262013193">Probabilistic Graphical Models: Principles and Techniques</a></li><li><input disabled="" type="checkbox"> <a href="https://www.amazon.com/Machine-Learning-Hands-Developers-Professionals/dp/1118889061">Machine Learning: Hands-On for Developers and Technical Professionals</a><ul><li><a href="https://blogs.msdn.microsoft.com/querysimon/2015/01/01/book-review-machine-learning-hands-on-for-developers-and-technical-professionals/">Machine Learning Hands-On for Developers and Technical Professionals review</a></li><li><a href="https://github.com/jasebell/mlbook">GitHub repository</a></li></ul></li><li><input disabled="" type="checkbox"> <a href="https://www.amazon.com/Learning-Data-Yaser-S-Abu-Mostafa/dp/1600490069">Learning from Data</a><br> - <a href="https://work.caltech.edu/telecourse.html">在线教程</a></li><li><input disabled="" type="checkbox"> <a href="https://webdocs.cs.ualberta.ca/~sutton/book/the-book-2nd.html">Reinforcement Learning: An Introduction (2nd Edition)</a><ul><li><a href="https://github.com/ShangtongZhang/reinforcement-learning-an-introduction">GitHub repository</a></li></ul></li><li><input disabled="" type="checkbox"> <a href="https://www.manning.com/books/machine-learning-with-tensorflow">使用TensorFlow(MEAP)进行机器学习</a><ul><li><a href="https://github.com/BinRoot/TensorFlow-Book">GitHub repository</a></li></ul></li></ul><h2 id="Kaggle知识竞赛"><a href="#Kaggle知识竞赛" class="headerlink" title="Kaggle知识竞赛"></a>Kaggle知识竞赛</h2><ul><li><input disabled="" type="checkbox"> <a href="https://www.analyticsvidhya.com/blog/2015/06/start-journey-kaggle/">Kaggle竞赛:怎么样,在哪里开始?</a></li><li><input disabled="" type="checkbox"> <a href="http://machinelearningmastery.com/how-a-beginner-used-small-projects-to-get-started-in-machine-learning-and-compete-on-kaggle">一个初学者如何用一个小项目在机器学习入门并在Kaggle竞争</a></li><li><input disabled="" type="checkbox"> <a href="http://machinelearningmastery.com/master-kaggle-by-competing-consistently/">如何竞争Kaggle的Master</a></li></ul><h2 id="系列视频"><a href="#系列视频" class="headerlink" title="系列视频"></a>系列视频</h2><ul><li><input disabled="" type="checkbox"> <a href="https://www.youtube.com/playlist?list=PL2-dafEMk2A4ut2pyv0fSIXqOzXtBGkLj">Machine Learning for Hackers</a></li><li><input disabled="" type="checkbox"> <a href="https://www.youtube.com/playlist?list=PL2-dafEMk2A6Kc7pV6gHH-apBFxwFjKeY">Fresh Machine Learning</a></li><li><input disabled="" type="checkbox"> <a href="https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal">Machine Learning Recipes with Josh Gordon</a></li><li><input disabled="" type="checkbox"> <a href="https://vimeo.com/43547079">Everything You Need to know about Machine Learning in 30 Minutes or Less</a></li><li><input disabled="" type="checkbox"> <a href="https://www.youtube.com/watch?v=IpGxLWOIZy4">A Friendly Introduction to Machine Learning</a></li><li><input disabled="" type="checkbox"> <a href="https://www.youtube.com/watch?v=F1ka6a13S9I">Nuts and Bolts of Applying Deep Learning - Andrew Ng</a></li><li><input disabled="" type="checkbox"> BigML Webinar<br> - <a href="https://www.youtube.com/watch?list=PL1bKyu9GtNYHcjGa6ulrvRVcm1lAB8he3&v=W62ehrnOVqo">视频</a><br> - <a href="https://bigml.com/releases">资源</a></li><li><input disabled="" type="checkbox"> <a href="https://www.youtube.com/playlist?list=PLD0F06AA0D2E8FFBA">mathematicalmonk’s Machine Learning tutorials</a></li><li><input disabled="" type="checkbox"> <a href="https://www.youtube.com/playlist?list=PL5-da3qGB5ICeMbQuqbbCOQWcS6OYBr5A">Machine learning in Python with scikit-learn</a><ul><li><a href="https://github.com/justmarkham/scikit-learn-videos">GitHub repository</a><br> - <a href="http://blog.kaggle.com/author/kevin-markham/">博客</a></li></ul></li><li><input disabled="" type="checkbox"> <a href="https://www.analyticsvidhya.com/blog/2015/07/top-youtube-videos-machine-learning-neural-network-deep-learning/">My playlist – Top YouTube Videos on Machine Learning, Neural Network & Deep Learning</a></li><li><input disabled="" type="checkbox"> <a href="https://www.analyticsvidhya.com/blog/2016/10/16-new-must-watch-tutorials-courses-on-machine-learning/">16 New Must Watch Tutorials, Courses on Machine Learning</a></li><li><input disabled="" type="checkbox"> <a href="https://www.youtube.com/channel/UC9OeZkIwhzfv-_Cb7fCikLQ">DeepLearning.TV</a></li><li><input disabled="" type="checkbox"> <a href="https://www.youtube.com/playlist?list=PLiaHhY2iBX9ihLasvE8BKnS2Xg8AhY6iV">Learning To See</a></li><li><input disabled="" type="checkbox"> <a href="https://www.youtube.com/playlist?list=PL6Xpj9I5qXYEcOhn7TqghAJ6NAPrNmUBH">Neural networks class - Université de Sherbrooke</a></li><li><input disabled="" type="checkbox"> <a href="https://www.analyticsvidhya.com/blog/2016/12/21-deep-learning-videos-tutorials-courses-on-youtube-from-2016/">2016年的21个深度学习视频课程</a></li><li><input disabled="" type="checkbox"> <a href="https://www.analyticsvidhya.com/blog/2016/12/30-top-videos-tutorials-courses-on-machine-learning-artificial-intelligence-from-2016/">2016年的30个顶级的机器学习与人工智能视频教程 Top Videos, Tutorials & Courses on Machine Learning & Artificial Intelligence from 2016</a></li><li><input disabled="" type="checkbox"> <a href="http://course.fast.ai/index.html">程序员的深度学习实战</a></li></ul><h2 id="MOOC"><a href="#MOOC" class="headerlink" title="MOOC"></a>MOOC</h2><ul><li><input disabled="" type="checkbox"> <a href="https://www.udacity.com/course/intro-to-machine-learning--ud120">Udacity的机器学习导论</a><ul><li><a href="http://hamelg.blogspot.com/2014/12/udacity-intro-to-machine-learning-review.html">复习Udacity机器学习导论</a></li></ul></li><li><input disabled="" type="checkbox"> <a href="https://www.udacity.com/course/machine-learning--ud262">Udacity的监督学习、非监督学习及深入</a></li><li><input disabled="" type="checkbox"> <a href="https://www.coursera.org/learn/ml-foundations">Machine Learning Foundations: A Case Study Approach</a></li><li><input disabled="" type="checkbox"> <a href="https://www.coursera.org/learn/machine-learning">Courserad的机器学习</a><ul><li><a href="https://www.youtube.com/playlist?list=PLZ9qNFMHZ-A4rycgrgOYma6zxF4BZGGPW">视频</a></li><li><a href="https://rayli.net/blog/data/coursera-machine-learning-review/">复习Coursera机器学习</a></li><li><a href="https://metacademy.org/roadmaps/cjrd/coursera_ml_supplement">Coursera的机器学习路线图</a></li></ul></li><li><input disabled="" type="checkbox"> <a href="https://code.tutsplus.com/courses/machine-learning-distilled">Machine Learning Distilled</a></li><li><input disabled="" type="checkbox"> <a href="https://bigml.com/training">BigML training</a></li><li><input disabled="" type="checkbox"> <a href="https://www.coursera.org/learn/neural-networks">Coursera的神经网络课程</a><ul><li>由Geoffrey Hinton(神经网络的先驱)执教</li></ul></li><li><input disabled="" type="checkbox"> <a href="https://www.kadenze.com/courses/creative-applications-of-deep-learning-with-tensorflow/info">使用TensorFlow创建深度学习应用</a></li><li><input disabled="" type="checkbox"> <a href="https://www.udacity.com/course/intro-to-descriptive-statistics--ud827">描述统计学概论</a></li><li><input disabled="" type="checkbox"> <a href="https://www.udacity.com/course/intro-to-inferential-statistics--ud201">推理统计学概论</a></li></ul><h2 id="资源"><a href="#资源" class="headerlink" title="资源"></a>资源</h2><ul><li><input disabled="" type="checkbox"> <a href="https://elitedatascience.com/machine-learning-masterclass">一个月学会机器学习</a></li><li><input disabled="" type="checkbox"> <a href="https://medium.com/@samdebrule/a-humans-guide-to-machine-learning-e179f43b67a0#.cpzf3a5c0">一份“非技术性”的机器学习与人工智能指南</a></li><li><input disabled="" type="checkbox"> <a href="https://news.ycombinator.com/item?id=12898718">Hacker News的《软件工程师的机器学习》</a></li><li><input disabled="" type="checkbox"> <a href="https://xyclade.github.io/MachineLearning/">开发者的机器学习</a></li><li><input disabled="" type="checkbox"> <a href="https://dev.to/thealexlavin/machine-learning-advice-for-developers">给开发者的关于机器学习的建议</a></li><li><input disabled="" type="checkbox"> <a href="http://pythonforengineers.com/machine-learning-for-complete-beginners/">机器学习入门</a></li><li><input disabled="" type="checkbox"> <a href="https://medium.com/@suffiyanz/getting-started-with-machine-learning-f15df1c283ea#.yjtiy7ei9">为新手准备的机器学习入门教程</a></li><li><input disabled="" type="checkbox"> <a href="https://elitedatascience.com/learn-machine-learning">初学者如何自学机器学习</a></li><li><input disabled="" type="checkbox"> <a href="https://ragle.sanukcode.net/articles/machine-learning-self-study-resources/">机器学习自学资源</a></li><li><input disabled="" type="checkbox"> <a href="https://metacademy.org/roadmaps/cjrd/level-up-your-ml">提升你的机器学习技能</a></li><li><input disabled="" type="checkbox"> <a href="https://medium.com/axiomzenteam/an-honest-guide-to-machine-learning-2f6d7a6df60e#.ib12a1yw5">一份’坦诚’的机器学习指南</a></li><li><input disabled="" type="checkbox"> 用机器学习让Hacker News更具可读性<ul><li><a href="https://www.youtube.com/watch?v=O7IezJT9uSI">视频</a></li><li><a href="https://speakerdeck.com/pycon2014/enough-machine-learning-to-make-hacker-news-readable-again-by-ned-jackson-lovely">幻灯片</a></li></ul></li><li><input disabled="" type="checkbox"> <a href="https://github.com/hangtwenty/dive-into-machine-learning">深入机器学习</a></li><li><input disabled="" type="checkbox"> <a href="https://speakerdeck.com/pmigdal/machine-deep-learning-for-software-engineers">软件工程师的{机器、深度}学习</a></li><li><input disabled="" type="checkbox"> <a href="https://deeplearning4j.org/deeplearningforbeginners.html">深度学习入门</a></li><li>大学中的机器学习课程<ul><li><input disabled="" type="checkbox"> <a href="http://ai.stanford.edu/courses/">斯坦福</a></li><li><input disabled="" type="checkbox"> <a href="http://mlss.cc/">机器学习夏令营</a></li><li><input disabled="" type="checkbox"> <a href="https://www.cs.ox.ac.uk/people/nando.defreitas/machinelearning/">牛津</a></li><li><input disabled="" type="checkbox"> <a href="http://mlg.eng.cam.ac.uk/">剑桥</a></li></ul></li><li>Flipboard的主题<ul><li><a href="https://flipboard.com/topic/machinelearning">机器学习</a></li><li><a href="https://flipboard.com/topic/deeplearning">深度学习</a></li><li><a href="https://flipboard.com/topic/artificialintelligence">人工智能</a></li></ul></li><li>Medium的主题<ul><li><a href="https://medium.com/tag/machine-learning/latest">机器学习</a></li><li><a href="https://medium.com/tag/deep-learning">深度学习</a></li><li><a href="https://medium.com/tag/artificial-intelligence">人工智能</a></li></ul></li><li>每月文章Top10<ul><li>机器学习<ul><li><a href="https://medium.mybridge.co/top-ten-machine-learning-articles-for-the-past-month-9c1202351144#.lyycen64y">2016年7月</a></li><li><a href="https://medium.mybridge.co/machine-learning-top-10-articles-for-the-past-month-2f3cb815ffed#.i9ee7qkjz">2016年8月</a></li><li><a href="https://medium.mybridge.co/machine-learning-top-10-in-september-6838169e9ee7#.4jbjcibft">2016年9月</a></li></ul></li></ul></li></ul><p> - <a href="https://medium.mybridge.co/machine-learning-top-10-articles-for-the-past-month-35c37825a943#.td5im1p5z">2016年10月</a><br> - <a href="https://medium.mybridge.co/machine-learning-top-10-articles-for-the-past-month-b499e4213a34#.7k39i08tv">2016年11月</a><br> - 算法<br> - <a href="https://medium.mybridge.co/algorithm-top-10-articles-in-september-8a0e6afb0807#.hgjzuyxdb">2016年9月</a><br> - <a href="https://medium.mybridge.co/algorithm-top-10-articles-v-november-e73cba2fa87e#.kothimkhb">2016年10月-11月</a></p><ul><li><a href="http://www.datasciencecentral.com/group/resources/forum/topics/comprehensive-list-of-data-science-resources">全面的数据科学家的资源</a></li><li><a href="http://blog.digitalmind.io/post/artificial-intelligence-resources">DigitalMind的人工智能资源</a></li><li><a href="https://github.com/josephmisiti/awesome-machine-learning">令人惊叹的机器学习</a></li><li><a href="http://www.creativeai.net/?cat%5B0%5D=machine-learning">CreativeAi的机器学习</a></li></ul><h2 id="成为一名开源贡献者"><a href="#成为一名开源贡献者" class="headerlink" title="成为一名开源贡献者"></a>成为一名开源贡献者</h2><ul><li><input disabled="" type="checkbox"> <a href="https://github.com/tensorflow/magenta">tensorflow/magenta: Magenta: Music and Art Generation with Machine Intelligence</a></li><li><input disabled="" type="checkbox"> <a href="https://github.com/tensorflow/tensorflow">tensorflow/tensorflow: Computation using data flow graphs for scalable machine learning</a></li><li><input disabled="" type="checkbox"> <a href="https://github.com/cmusatyalab/openface">cmusatyalab/openface: Face recognition with deep neural networks.</a></li><li><input disabled="" type="checkbox"> <a href="https://github.com/tensorflow/models/tree/master/syntaxnet">tensorflow/models/syntaxnet: Neural Models of Syntax.</a></li></ul><h2 id="游戏"><a href="#游戏" class="headerlink" title="游戏"></a>游戏</h2><ul><li><a href="https://halite.io/">Halite:AI编程游戏</a></li><li><a href="http://vindinium.org/">Vindinium: 挑战AI编程</a></li><li><a href="http://www.gvgai.net/">Video Game AI比赛</a></li><li><a href="https://aibirds.org/">愤怒的小鸟AI比赛</a></li><li><a href="http://theaigames.com/">The AI Games</a></li><li><a href="http://www.ice.ci.ritsumei.ac.jp/~ftgaic/">Fighting Game AI Competition</a></li><li><a href="http://www.codecup.nl/intro.php">CodeCup</a></li><li><a href="http://sscaitournament.com/">星际争霸AI学生锦标赛</a></li><li><a href="http://www.cs.mun.ca/~dchurchill/starcraftaicomp/">AIIDE星际争霸AI竞赛</a></li><li><a href="https://sites.google.com/site/starcraftaic/">CIG星际争霸AI竞赛</a></li><li><a href="https://www.codingame.com/training/machine-learning">CodinGame - AI Bot Games</a></li></ul><h2 id="播客"><a href="#播客" class="headerlink" title="播客"></a>播客</h2><ul><li><h3 id="适合初学者的播客:"><a href="#适合初学者的播客:" class="headerlink" title="适合初学者的播客:"></a>适合初学者的播客:</h3><ul><li><a href="http://www.thetalkingmachines.com/">Talking Machines</a></li><li><a href="http://lineardigressions.com/">Linear Digressions</a></li><li><a href="http://dataskeptic.com/">Data Skeptic</a></li><li><a href="https://twimlai.com/">This Week in Machine Learning & AI</a></li></ul></li><li><h3 id="“更多”进阶的播客:"><a href="#“更多”进阶的播客:" class="headerlink" title="“更多”进阶的播客:"></a>“更多”进阶的播客:</h3><ul><li><a href="http://partiallyderivative.com/">Partially Derivative</a></li><li><a href="http://radar.oreilly.com/tag/oreilly-data-show-podcast">O’Reilly Data Show</a></li><li><a href="https://soundcloud.com/nssd-podcast">Not So Standard Deviation</a></li></ul></li><li><h3 id="盒子外的播客:"><a href="#盒子外的播客:" class="headerlink" title="盒子外的播客:"></a>盒子外的播客:</h3><ul><li><a href="http://datastori.es/">Data Stories</a></li></ul></li></ul><h2 id="社区"><a href="#社区" class="headerlink" title="社区"></a>社区</h2><ul><li><p>Quora</p><ul><li><a href="https://www.quora.com/topic/Machine-Learning">机器学习</a></li><li><a href="https://www.quora.com/topic/Statistics-academic-discipline">统计学</a></li><li><a href="https://www.quora.com/topic/Data-Mining">数据挖掘</a></li></ul></li><li><p>Reddit</p><ul><li><a href="https://www.reddit.com/r/machinelearning">机器学习</a></li><li><a href="https://www.reddit.com/r/computervision">计算机视觉</a></li><li><a href="https://www.reddit.com/r/languagetechnology">自然语言处理</a></li><li><a href="https://www.reddit.com/r/datascience">数据科学</a></li><li><a href="https://www.reddit.com/r/bigdata">大数据</a></li><li><a href="https://www.reddit.com/r/statistics">统计学</a></li></ul></li><li><p><a href="http://www.datatau.com/">Data Tau</a></p></li><li><p><a href="http://news.startup.ml/">Deep Learning News</a></p></li><li><p><a href="http://www.kdnuggets.com/">KDnuggets</a></p></li></ul><h2 id="面试问题"><a href="#面试问题" class="headerlink" title="面试问题"></a>面试问题</h2><ul><li><input disabled="" type="checkbox"> <a href="http://blog.udacity.com/2016/05/prepare-machine-learning-interview.html">如何准备机器学习职位的面试</a></li><li><input disabled="" type="checkbox"> <a href="https://www.analyticsvidhya.com/blog/2016/09/40-interview-questions-asked-at-startups-in-machine-learning-data-science">40个机器学习与数据科学的面试问题</a></li><li><input disabled="" type="checkbox"> <a href="http://www.kdnuggets.com/2016/02/21-data-science-interview-questions-answers.html">21个必须要知道的数据科学问题与回答</a></li><li><input disabled="" type="checkbox"> <a href="http://career.guru99.com/top-50-interview-questions-on-machine-learning/">Top 50 机器学习面试问题与回答</a></li><li><input disabled="" type="checkbox"> <a href="https://resources.workable.com/machine-learning-engineer-interview-questions">机器学习面试问题</a></li><li><input disabled="" type="checkbox"> <a href="http://www.learn4master.com/machine-learning/popular-machine-learning-interview-questions">常用的机器学习面试问题</a></li><li><input disabled="" type="checkbox"> <a href="https://www.quora.com/What-are-some-common-Machine-Learning-interview-questions">机器学习面试问题有哪些相同的?</a></li><li><input disabled="" type="checkbox"> <a href="https://www.quora.com/What-are-the-best-interview-questions-to-evaluate-a-machine-learning-researcher">什么是评价一个机器学习研究者的最好的问题?</a></li><li><input disabled="" type="checkbox"> <a href="http://analyticscosm.com/machine-learning-interview-questions-for-data-scientist-interview/">机器学习面试问题大搜集</a></li><li><input disabled="" type="checkbox"> <a href="https://learn.elitedatascience.com/mlqa-welcome">121个需要掌握的问题与回答</a></li><li><input disabled="" type="checkbox"> <a href="https://www.springboard.com/blog/machine-learning-interview-questions/">41个基本机器学习面试问题(附答案)</a></li></ul><h2 id="我崇拜的公司"><a href="#我崇拜的公司" class="headerlink" title="我崇拜的公司"></a>我崇拜的公司</h2><ul><li><input disabled="" type="checkbox"> <a href="https://www.elsanow.io/home">ELSA - 你虚拟的口语教练</a></li></ul>]]></content>
<summary type="html"><p>灵感来源于 <a href="https://github.com/jwasham/google-interview-university/blob/master/translations/README-cn.md">谷歌面试学习手册</a></p>
<blockquote</summary>
<category term="深度学习" scheme="http://blog.mindcont.com/categories/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/"/>
</entry>
<entry>
<title>局域网内nginx反向代理上网</title>
<link href="http://blog.mindcont.com/2016/12/26/nginx-proxy-lan/"/>
<id>http://blog.mindcont.com/2016/12/26/nginx-proxy-lan/</id>
<published>2016-12-26T04:31:25.000Z</published>
<updated>2018-04-16T09:43:33.906Z</updated>
<content type="html">< --><img src="https://sslbucket-a.akamaihd.net/www.opswat.com/images/blog/web-proxy-diagram-new.png" width="512px"><h3 id="设置nginx为HTTP代理服务器"><a href="#设置nginx为HTTP代理服务器" class="headerlink" title="设置nginx为HTTP代理服务器"></a>设置nginx为HTTP代理服务器</h3><p><strong>服务器端即HOSTA主机</strong>,设置nginx为HTTP代理服务器上网,只需要3步,分别为安装nginx、配置nginx、修改OpenWrt 防火墙。</p><p><strong>1、登录OpenWrt 安装nginx</strong><br>在windows下使用SSH工具,如<a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/">Putty</a>等,在Host name 填写192.168.1.1,端口22 ,然后点击 Open.<br><img src="/images/iot/openwrt/putty.png"></p><p>在linux下,打开终端输入</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh [email protected]</span><br></pre></td></tr></table></figure><p>输人密码(默认 admin)登陆,如下图所示s<br><img src="/images/iot/openwrt/welcome.png"></p><p>使用opkg安装 nginx ,输入下面的指令</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">opkg update</span><br><span class="line">opkg install nginx</span><br></pre></td></tr></table></figure><p><strong>2、配置 nginx</strong><br>这里我们首先将nginx原本配置文件<code>nginx.conf</code>备份为<code>nginx.conf.backup</code>,后修改里面的内容,配置为HTTP反向代理模式,选择8080为服务监听端口。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">cd /etc/nginx</span><br><span class="line">cp nginx.conf nginx.conf.backup</span><br><span class="line">vi nginx.conf</span><br></pre></td></tr></table></figure><p>将下面的内容替换<code>nginx.conf</code>中默认的内容</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line">user nobody nogroup;</span><br><span class="line">worker_processes 1;</span><br><span class="line"></span><br><span class="line">events {</span><br><span class="line"> worker_connections 1024;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">http {</span><br><span class="line"> #include mime.types;</span><br><span class="line"> #default_type application/octet-stream;</span><br><span class="line"></span><br><span class="line"> #log_format main '$remote_addr - $remote_user [$time_local] "$request" '</span><br><span class="line"> # '$status $body_bytes_sent "$http_referer" '</span><br><span class="line"> # '"$http_user_agent" "$http_x_forwarded_for"';</span><br><span class="line"></span><br><span class="line"> sendfile on;</span><br><span class="line"> #tcp_nopush on;</span><br><span class="line"></span><br><span class="line"> keepalive_timeout 65;</span><br><span class="line"></span><br><span class="line"> gzip on;</span><br><span class="line"> #include /etc/nginx/conf.d/*.conf;</span><br><span class="line"></span><br><span class="line"> resolver 114.114.114.114;</span><br><span class="line"> server {</span><br><span class="line"> listen 8080;</span><br><span class="line"> location / {</span><br><span class="line"> proxy_pass $scheme://$http_host$request_uri;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>修改完成后,按 esc ,输入<code>:wq!</code> 保存<br>紧接着,启动nginx</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cd /etc/init.d</span><br><span class="line">./nginx start</span><br></pre></td></tr></table></figure><p><strong>3、修改OpenWrt 防火墙</strong><br>由于OpenWrt wan口防火墙默认禁止入站数据,这里我们需要改为<code>ACCEPT</code>。在OpenWrt LuCI 界面中修改防火期设置。</p><p>打开浏览器,输入<code>192.168.1.1</code> ,账号默认为root,默认密码admin。依次选择网络 -> 防火墙</p><p><img src="/images/iot/openwrt/firewall.png"></p><p>使你的设置同绿框中标明的那样,然后点击<code>保存&应用</code>。</p><p>略过此步,使用windows 网络 ->疑难解答,你将会看到<strong>该设备或资源(Web 代理)未设置为接受端口’8080’上的连接</strong>的错误提示,如下<br><img src="/images/iot/openwrt/reject-detail.png"></p><h3 id="设置浏览器的代理-以IE为例"><a href="#设置浏览器的代理-以IE为例" class="headerlink" title="设置浏览器的代理(以IE为例)"></a>设置浏览器的代理(以IE为例)</h3><p>设置HOSTB为http全局代理,以windows平台为例,在控制面板 -> Internet选项 -> 连接 -> 局域网设置 -> 代理服务器</p><p>填写IP(这里我们填写HOSTA 的IP,即110.1.1.65)和Port(即nginx 监听端口8080)即可。</p><p><img src="/images/iot/openwrt/client-config.png"></p><p>注明:<strong>nginx不支持https正向代理</strong> 因为nginx不支持CONNECT,所以无法正向代理https网站。</p><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><a href="http://blog.csdn.net/guowenyan001/article/details/22718179">Nginx:设置为HTTP代理服务器上网</a></li><li><a href="http://www.cnblogs.com/xshrim/p/5934032.html">局域网下通过代理实现服务器的互联网访问</a></li><li><a href="http://blog.csdn.net/aa120515692/article/details/46917637">openwrt 防火墙设置 /etc/config/firewall</a></li></ul>]]></content>
<summary type="html"><p><strong>背景:</strong>局域网下有两台Linux服务器,信息如下:</p>
<table>
<thead>
<tr>
<th>服务器</th>
<th>IP地址</th>
<th>操作系统</th>
<th>Internet访问</th>
</tr>
</thead>
<tbody><tr>
<td>HOSTA(OpenWrt路由器)</td>
<td>110.1.1.65(wan)</td>
<td>CentOS 6.7 x64</td>
<td>是</td>
</tr>
<tr>
<td>HOSTB</td>
<td>110.1.1.215</td>
<td>CentOS 6.7 x64</td>
<td>否</td>
</tr>
</tbody></table></summary>
<category term="物联" scheme="http://blog.mindcont.com/categories/%E7%89%A9%E8%81%94/"/>
<category term="openwrt" scheme="http://blog.mindcont.com/tags/openwrt/"/>
</entry>
<entry>
<title>naoqi ros 开发环境搭建</title>
<link href="http://blog.mindcont.com/2016/12/14/ros-naoqi-ubuntu/"/>
<id>http://blog.mindcont.com/2016/12/14/ros-naoqi-ubuntu/</id>
<published>2016-12-14T08:47:33.000Z</published>
<updated>2018-02-27T02:46:08.469Z</updated>
<content type="html"><![CDATA[<p>ROS( robot operating system) 是一款开源的面向与机器人控制领域的操作系统,起源于2007斯坦福大学人工智能实验室的项目与机器人技术公司Willow Garage 的个人机器人项目之间的合作,2008年之后由Willow Garage 推动,2010 年该公司将其开源,2015年,ros 发布了Jade 版本。</p><span id="more"></span><p><img src="/images/coding/ubuntu/ros/hero_product.jpg"></p><p><a href="http://blog.mindcont.com/2016/12/14/naoqi-robot-sdk-ubuntu/">书接上回</a>,下面我将带您一览ros和naoqi robot 在ubuntu 14.04(lts)版本下开发环境的搭建。</p><h3 id="安装-ros-indigo-desktop"><a href="#安装-ros-indigo-desktop" class="headerlink" title="安装 ros-indigo-desktop"></a>安装 ros-indigo-desktop</h3><ul><li>1、 配置 Ubuntu 软件仓库<br>配置你的 Ubuntu 软件仓库(repositories) 以允许 “restricted”、”universe” 和 “multiverse”这三种安装模式。 你可以 <a href="https://help.ubuntu.com/community/Repositories/Ubuntu">按照ubuntu中的配置指南</a>来完成配置。</li></ul><p><img src="/images/coding/ubuntu/ros/ubuntu-repositories-config.png"></p><ul><li><p>2、 添加 sources.list<br>配置你的电脑使其能够安装来自 packages.ros.org的软件。 ROS Indigo 仅 支持 Saucy (13.10) 和 Trusty (14.04)。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[官方]</span><br><span class="line">sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'</span><br><span class="line"></span><br><span class="line">[国内镜像]</span><br><span class="line">sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'</span><br></pre></td></tr></table></figure><p> <strong>注</strong>:强烈建议使用国内或者新加坡的镜像源,这样能够大大提高安装下载速度。</p></li><li><p>3、 添加 keys</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116</span><br><span class="line">sudo apt-get update</span><br></pre></td></tr></table></figure></li><li><p>4、 桌面版安装: 包含ROS、rqt、rviz以及通用机器人函数库。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install ros-indigo-desktop</span><br></pre></td></tr></table></figure></li><li><p>5、后续环节</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"># 安装 rosinstall</span><br><span class="line">sudo apt-get install python-rosinstall</span><br><span class="line"></span><br><span class="line"># 初始化 rosdep</span><br><span class="line">sudo rosdep init</span><br><span class="line">rosdep update</span><br><span class="line"></span><br><span class="line"># 配置环境变量 Environment setup</span><br><span class="line">echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc</span><br><span class="line">. ~/.bashrc</span><br></pre></td></tr></table></figure><p> <strong>note</strong>: If you have more than one ROS distribution installed, ~/.bashrc must only source the setup.bash for the version you are currently using.</p></li></ul><h3 id="启动-ROS-on-a-virtual-NAOqi"><a href="#启动-ROS-on-a-virtual-NAOqi" class="headerlink" title="启动 ROS on a virtual NAOqi"></a>启动 ROS on a virtual NAOqi</h3><p>Before starting, please make sure you meet all the required dependencies especially the packages <a href="http://wiki.ros.org/naoqi_driver">naoqi_driver</a>, <a href="http://wiki.ros.org/naoqi_bridge">naoqi_bridge</a> and <a href="http://wiki.ros.org/nao_description">nao_description</a>. You can either install the official releases via your package manager or directly clone the necessary ros packages from github.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">#时钟同步,用于同步机器人和开发者PC 指令时钟</span><br><span class="line">sudo apt-get install chrony</span><br><span class="line"></span><br><span class="line">#中间层驱动</span><br><span class="line">sudo apt-get install ros-indigo-naoqi-driver ros-indigo-naoqi-bridge ros-indigo-nao-description</span><br><span class="line"></span><br><span class="line"># robot 3D meshes</span><br><span class="line">sudo apt-get install ros-indigo-nao-meshes</span><br></pre></td></tr></table></figure><p>安装 naoqi 为ros提供的中间接口部件<br>The core functionality is implemented in the <a href="http://wiki.ros.org/nao_robot">nao_robot</a> stack (can be installed on the robot or on a remote PC), extended with further functionality in <a href="http://wiki.ros.org/nao_extras">nao_extras</a> (should be installed on a remote PC).</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install ros-indigo-nao-robot ros-indigo-nao-extras</span><br></pre></td></tr></table></figure><p><strong>1、运行roscore</strong><br>打开命令行窗口,这里我们称它为窗口1</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">roscore</span><br></pre></td></tr></table></figure><p><img src="/images/coding/ubuntu/ros/roscore.png"></p><p><strong>2、运行naoqi-bin 启动虚拟naoqi</strong><br>再打开一个新的命令行窗口,这里我们称它为窗口2</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">~/naoqi/choregraphe-suite-2.1.4.13-linux64/bin/naoqi-bin --verbose --broker-ip 127.0.0.1</span><br></pre></td></tr></table></figure><p>broker-ip地址127.0.0.1是用于连接到您自己的PC的环回地址。 因此,只有本地ROS可以连接到NAOqi。 NAOqi API可以通过broker-ip地址访问,nao_driver充当NAOqi API的包装器。</p><p><img src="/images/coding/ubuntu/ros/naoqi-bin.png"></p><p><strong>3、然后启动ros_driver包,使ros连接到本地PC上的模拟Naoqi</strong><br>再打开一个新的命令行窗口,这里我们称它为窗口3,在新终端中运行:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">LD_LIBRARY_PATH=~/naoqi/choregraphe-suite-2.1.4.13-linux64/lib:$LD_LIBRARY_PATH NAO_IP=127.0.0.1 roslaunch naoqi_driver_py naoqi_driver.launch</span><br></pre></td></tr></table></figure><p><strong>注意</strong>:不要将此路径添加到.bashrc中的全局LD_LIBRARY_PATH,因为其他事情将会中断。 例如 rviz将无法运行与错误</p><p><img src="/images/coding/ubuntu/ros/naoqi_driver_launch.png"></p><p>完整输出如下:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line">... logging to /home/pi/.ros/log/873f953c-c1d1-11e6-bfbe-68f728886d0f/roslaunch-MINDCONT-32499.log</span><br><span class="line">Checking log directory for disk usage. This may take awhile.</span><br><span class="line">Press Ctrl-C to interrupt</span><br><span class="line">Done checking log file disk usage. Usage is <1GB.</span><br><span class="line"></span><br><span class="line">started roslaunch server http://MINDCONT:44778/</span><br><span class="line"></span><br><span class="line">SUMMARY</span><br><span class="line">========</span><br><span class="line"></span><br><span class="line">PARAMETERS</span><br><span class="line">* /naoqi_joint_states/use_odometry: True</span><br><span class="line">* /rosdistro: indigo</span><br><span class="line">* /rosversion: 1.11.20</span><br><span class="line"></span><br><span class="line">NODES</span><br><span class="line"> /</span><br><span class="line"> nao_logger (naoqi_driver_py/naoqi_logger.py)</span><br><span class="line"> naoqi_joint_states (naoqi_driver_py/naoqi_joint_states.py)</span><br><span class="line"> naoqi_moveto (naoqi_driver_py/naoqi_moveto.py)</span><br><span class="line"></span><br><span class="line">ROS_MASTER_URI=http://localhost:11311</span><br><span class="line"></span><br><span class="line">core service [/rosout] found</span><br><span class="line">process[naoqi_joint_states-1]: started with pid [32526]</span><br><span class="line">process[naoqi_moveto-2]: started with pid [32527]</span><br><span class="line">process[nao_logger-3]: started with pid [32528]</span><br><span class="line">[INFO] [WallTime: 1481702387.495187] Connecting to NaoQi at 127.0.0.1:9559</span><br><span class="line">[I] 32527 qimessaging.session: Session listener created on tcp://0.0.0.0:0</span><br><span class="line">[I] 32527 qimessaging.transportserver: TransportServer will listen on: tcp://172.17.0.1:34320</span><br><span class="line">[I] 32527 qimessaging.transportserver: TransportServer will listen on: tcp://192.168.1.123:34320</span><br><span class="line">[I] 32527 qimessaging.transportserver: TransportServer will listen on: tcp://127.0.0.1:34320</span><br></pre></td></tr></table></figure><p>至此,你就通过ros -> naoqi_driver -> virtual NAOqi 会话过程的建立,但是还没有可视化过程,下面我们将进行可视化。</p><h3 id="通过rviz可视化模拟机器人-Nao-robot"><a href="#通过rviz可视化模拟机器人-Nao-robot" class="headerlink" title="通过rviz可视化模拟机器人 Nao robot"></a>通过rviz可视化模拟机器人 Nao robot</h3><p>关闭所有的窗口,然后打开一个新的窗口,输入下面的指令</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">roslaunch nao_description display.launch</span><br></pre></td></tr></table></figure><p>在左上角的“显示”窗口中,将“固定框架”更改为“/ base_link”。如果只有“/ map”选项可用,则不会从上一步加载URDF模型。<br><img src="/images/coding/ubuntu/ros/fixed-frame-base_link.jpg"></p><p>点击“添加”按钮并添加RobotModel</p><p><img src="/images/coding/ubuntu/ros/add-robot-model.png"></p><p>如果一切正常,你会看到一个机器人模型。通过调节右侧的滑块,机器人将做相应的动作。</p><p><img src="/images/coding/ubuntu/ros/naoqi-display.jpg"><br><img src="/images/coding/ubuntu/ros/turtlebot.jpg"></p><p>如果过程中遇到错误和问题,请参考下面的<a href="http://blog.mindcont.coms/2016/12/14/ros-naoqi-ubuntu/#%E5%8F%82%E8%80%83">参考链接</a>。</p><p>本文系作者原创,<strong>转载注明出处 <a href="http://blog.mindcont.com/2016/12/14/ros-naoqi-ubuntu/">http://blog.mindcont.com/2016/12/14/ros-naoqi-ubuntu/</a></strong></p><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><a href="http://wiki.ros.org/openni/Contests/ROS%203D/Humanoid%20Teleoperation">Humanoid Teleoperation</a></li><li><a href="http://wiki.ros.org/nao/Tutorials">nao Tutorials</a></li><li><a href="http://wiki.ros.org/cturtle/Installation/Ubuntu">Ubuntu install of C turtle</a></li><li><a href="http://wiki.ros.org/cn/indigo/Installation/Ubuntu">在Ubuntu中安装ROS Indigo</a></li><li><a href="http://wiki.ros.org/nao">ros-nao</a></li><li><a href="http://wiki.ros.org/nao/Tutorials/Installation">ros-nao-install</a></li><li><a href="http://wiki.ros.org/nao/Tutorials/Getting-Started">Getting started with ROS for Nao</a></li><li><a href="http://wiki.ros.org/nao/Tutorials/Getting-Started#Launching_ROS_on_a_virtual_NAOqi">Launching_ROS_on_a_virtual_NAOqi</a></li></ul>]]></content>
<summary type="html"><p>ROS( robot operating system) 是一款开源的面向与机器人控制领域的操作系统,起源于2007斯坦福大学人工智能实验室的项目与机器人技术公司Willow Garage 的个人机器人项目之间的合作,2008年之后由Willow Garage 推动,2010 年该公司将其开源,2015年,ros 发布了Jade 版本。</p></summary>
<category term="ros" scheme="http://blog.mindcont.com/tags/ros/"/>
</entry>
<entry>
<title>naoqi robot 开发环境搭建</title>
<link href="http://blog.mindcont.com/2016/12/14/naoqi-robot-sdk-ubuntu/"/>
<id>http://blog.mindcont.com/2016/12/14/naoqi-robot-sdk-ubuntu/</id>
<published>2016-12-14T02:52:41.000Z</published>
<updated>2018-02-27T02:46:08.451Z</updated>
<content type="html"><![CDATA[<p>本文将带您完成naoqi robot SDK 在ubuntu 14.04(lts)下开发环境的配置,这里值得注意的是您不一定需要购买一个naoqi 机器人才能进行开发,这里可以选择使用虚拟机器人,一般开发过程中我们首先将程序指令在虚拟机器人中进行调试,待成功后下载到真实机器人中进行实地运行。</p><span id="more"></span><p><img src="/images/coding/ubuntu/ros/2016_DEV_PROG_launch_banner_600x360_mailing_V3_EN.png"></p><h3 id="安装-naoqi-choregraphe-suite"><a href="#安装-naoqi-choregraphe-suite" class="headerlink" title="安装 naoqi choregraphe suite"></a>安装 naoqi choregraphe suite</h3><p>Choregraphe是一个多平台的桌面应用程序,允许您:</p><p>1、创建动画,行为和对话框,<br>2、在模拟机器人上或直接在真实机器人上测试它们,<br>3、监控和控制你的机器人,<br>4、使用自己的Python代码丰富Choregraphe行为。</p><p>由于官方提供的链接国内下载容易失败,这里可以使用笔者已经下载好的文件。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">wget ftp://mindcont.com/IoT/Naoqi/Choregraphe/choregraphe-suite-2.1.4.13-linux64.tar.gz</span><br><span class="line">tar -xvf choregraphe-suite-2.1.4.13-linux64.tar.gz naoqi/</span><br><span class="line">cd ~/naoqi/choregraphe-suite-2.1.4.13-linux64/</span><br><span class="line">./choregraphe</span><br></pre></td></tr></table></figure><p><img src="/images/coding/ubuntu/ros/choregraphe-license.png"></p><p>这里先选择试用,当然你可以去<a href="https://community.ald.softbankrobotics.com/en/developerprogram">开发者社区</a>申请为开发者,可以无限制的免费使用,但同一时间只能有一个 choregraphe运行。</p><p>打开后界面如下,类似于matlab 工具箱中的模块化编程,可以在左下角中选择官方封装好的模块,然后用鼠标拖动到中间区域,连线使之成为一个通路,然后点击上方的绿色三角形,让虚拟机器人开始执行。</p><p><img src="/images/coding/ubuntu/ros/choregraphe.jpg"></p><p>通过执行naoqi来检查安装是否成功:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cd ~/naoqi/choregraphe-suite-2.1.4.13-linux64/bin</span><br><span class="line">./naoqi-bin</span><br></pre></td></tr></table></figure><p>你应该看到类似的输出:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><span class="line">pi@MINDCONT:~/naoqi/choregraphe-suite-2.1.4.13-linux64/bin$ ./naoqi-bin</span><br><span class="line">[I] 27177 core.naoqi: ..::: starting NAOqi version 2.1.4 :::..</span><br><span class="line">[I] 27177 core.naoqi: Copyright (c) 2005-2013, Aldebaran Robotics</span><br><span class="line">[I] 27177 core.naoqi: Build tag: jenkins-release-2.1_choregraphe-suite_linux64-39</span><br><span class="line">[I] 27177 qimessaging.servicedirectory: ServiceDirectory listener created on tcp://0.0.0.0:9559</span><br><span class="line">[I] 27177 qimessaging.transportserver: TransportServer will listen on: tcp://172.17.0.1:9559</span><br><span class="line">[I] 27177 qimessaging.transportserver: TransportServer will listen on: tcp://192.168.1.123:9559</span><br><span class="line">[I] 27177 qimessaging.transportserver: TransportServer will listen on: tcp://127.0.0.1:9559</span><br><span class="line">[I] 27177 qimessaging.servicedirectory: Registered Service "ServiceDirectory" (#1)</span><br><span class="line">[I] 27177 qimessaging.servicedirectory: Registered Service "LogManager" (#2)</span><br><span class="line">....</span><br><span class="line">....</span><br><span class="line">[I] 27177 Dialog.LongTermMemory: User database creation succeed</span><br><span class="line">[I] 27177 Dialog.preference: No dialog history management</span><br><span class="line">[I] 27177 Dialog.preference: AI system enabled</span><br><span class="line">[I] 27177 Dialog.preference: BNF confidence 0.5</span><br><span class="line">[I] 27177 Dialog.preference: REMOTE confidence 0.3</span><br><span class="line">[I] 27177 Dialog.preference: Serialization enabled</span><br><span class="line">[I] 27177 Dialog.preference: Upper SLM 1</span><br><span class="line">[I] 27177 Dialog.preference: Enable auto update</span><br><span class="line">[I] 27177 Dialog.preference: Push mode 2</span><br><span class="line">[I] 27177 Dialog.preference: Enable full speech recognition</span><br><span class="line">[I] 27177 Dialog.preference: Audio expression enabled</span><br><span class="line">[I] 27177 Dialog.preference: Smalldisplacement enabled</span><br><span class="line">[I] 27177 Dialog.preference: Breath enabled</span><br><span class="line">[I] 27177 Dialog.preference: No animated speech configuration</span><br><span class="line">[I] 27177 Dialog.preference: Default volume 0</span><br><span class="line">[I] 27177 Dialog.preference: No dialog history management</span><br><span class="line">[I] 27177 Dialog.preference: AI system enabled</span><br><span class="line">[I] 27177 Dialog.preference: BNF confidence 0.5</span><br><span class="line">[I] 27177 Dialog.preference: REMOTE confidence 0.3</span><br><span class="line">[I] 27177 Dialog.preference: Serialization enabled</span><br><span class="line">[I] 27177 Dialog.preference: Upper SLM 1</span><br><span class="line">[I] 27177 Dialog.preference: Enable auto update</span><br><span class="line">[I] 27177 Dialog.preference: Push mode 2</span><br><span class="line">[I] 27177 Dialog.preference: Enable full speech recognition</span><br><span class="line">[I] 27177 Dialog.preference: Audio expression enabled</span><br><span class="line">[I] 27177 Dialog.preference: Smalldisplacement enabled</span><br><span class="line">[I] 27177 Dialog.preference: Breath enabled</span><br><span class="line">[I] 27177 Dialog.preference: No animated speech configuration</span><br><span class="line">[I] 27177 Dialog.preference: Default volume 0</span><br><span class="line">[I] 27177 qimessaging.servicedirectory: Registered Service "ALDialog" (#77)</span><br><span class="line">[I] 27177 core.naoqi: NAOqi is ready...</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="安装-naoqi-python-SDK"><a href="#安装-naoqi-python-SDK" class="headerlink" title="安装 naoqi python SDK"></a>安装 naoqi python SDK</h3><p>这里我们采用 naoqi 官方提供的python 接口(类似的还可以选择 java 、c++ 步骤类似),调用封装好的函数,实现自己的功能。我已经下载好windows、mac、linux 各个平台的开发所需的文件,大家可以在<a href="ftp://mindcont.com/IoT/Naoqi">ftp://mindcont.com/IoT/Naoqi</a>自行下载。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">wget ftp://mindcont.com/IoT/Naoqi/sdk/python/pynaoqi-python2.7-2.1.4.13-linux64.tar.gz</span><br><span class="line">tar -xvf pynaoqi-python2.7-2.1.4.13-linux64.tar.gz naoqi/</span><br><span class="line"></span><br><span class="line"># 配置环境变量,在打开的文本中添加下面的内容.注意换成你的路径</span><br><span class="line">gedit ~/.bashrc</span><br><span class="line"></span><br><span class="line"># edit for naoqi python sdk</span><br><span class="line">export PYTHONPATH=${PYTHONPATH}:/home/pi/naoqi/pynaoqi-python2.7-2.1.4.13-linux64/</span><br><span class="line"></span><br><span class="line"># 保存后,输入下面的指令使其生效</span><br><span class="line">source ~/.bashrc</span><br></pre></td></tr></table></figure><p>打开新的命令行窗口,用python 的导入naoqi 包,来测试你的路径是否配置成功。如果没有报错,那麽恭喜你完成了naoqi 机器人的开发环境搭建。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">python</span><br><span class="line">import naoqi</span><br></pre></td></tr></table></figure><p><img src="/images/coding/ubuntu/ros/naoqi-python-sdk.png"></p><h2 id="Next"><a href="#Next" class="headerlink" title="Next"></a>Next</h2><p>下一步,我们会构建<a href="http://blog.mindcont.com/2016/12/14/ros-naoqi-ubuntu/">基于ROS的 naoqi 机器人开发环境</a>的搭建,欢迎继续关注。</p><p>本文系作者原创,<strong>转载注明出处 <a href="http://blog.mindcont.com/2016/12/14/naoqi-robot-sdk-ubuntu/">http://blog.mindcont.com/2016/12/14/naoqi-robot-sdk-ubuntu/</a></strong></p><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><a href="http://wiki.ros.org/nao/Tutorials/Getting-Started">Getting started with ROS for Nao</a></li><li><a href="http://doc.aldebaran.com/1-14/dev/python/install_guide.html#python-install-guide">Python SDK Install Guide</a></li><li><a href="http://doc.aldebaran.com/2-1/software/choregraphe/choregraphe_overview.html">Naoqi Robot Choregraphe doc</a></li></ul>]]></content>
<summary type="html"><p>本文将带您完成naoqi robot SDK 在ubuntu 14.04(lts)下开发环境的配置,这里值得注意的是您不一定需要购买一个naoqi 机器人才能进行开发,这里可以选择使用虚拟机器人,一般开发过程中我们首先将程序指令在虚拟机器人中进行调试,待成功后下载到真实机器人中进行实地运行。</p></summary>
<category term="ros" scheme="http://blog.mindcont.com/tags/ros/"/>
</entry>
</feed>