文章

Tmux 用法

新建会话 新建一个tmux session非常简单,语法为 tmux new -s session-name ,也可以简写为 tmux ,为了方便管理,建议指定会话名称,如下。 tmux # 新建一个无名称的会话 tmux new -s demo # 新建一个名称为demo的会话 1 2 断开当前会话 会话中操作了一段时间,我希望断开会话同时下次还能接着用,怎么做?此时可以使用detach命令。 tmux detach # 断开当前会话,会话在后台运行 1 也许你觉得这个太麻烦了,是的,tmux的会话中,我们已经可以使用tmux快捷键了。使用快捷键组合 Ctrl+b  +  d ,三次按键就可以断开当前会话。 进入之前的会话 断开会话后,想要接着上次留下的现场继续工作,就要使用到tmux的attach命令了,语法为 tmux attach-session -t session-name ,可简写为 tmux a -t session-name  或  tmux a 。通常我们使用如下两种方式之一即可: tmux a # 默认进入第一个会话 tmux a -t demo # 进入到名称为demo的会话 查看所有的会话 管理会话的第一步就是要查看所有的会话,我们可以使用如下命令: tmux list-session # 查看所有会话 tmux ls # 查看所有会话,提倡使用简写形式 Tmux快捷指令 关于快捷指令,首先要认识到的是:tmux的所有指令,都包含同一个前缀,默认为Ctrl+b,输入完前缀过后,控制台激活,命令按键才能生效。前面tmux会话相关的操作中,我们共用到了两个快捷键Ctrl+b + d、Ctrl+b + s,但这仅仅是冰山一角,欲窥tmux庞大的快捷键体系,请看下表。 灵活的配置性 除了快捷指令外,tmux还提供了类似vim的配置性功能。可配置性是软件的一项进阶级功能,只有具备了可配置性,软件才有了鲜活的个性,用户才能体会到操作的快感。 修改指令前缀 相信只要你用过几次tmux,就会发现Ctrl+b指令前缀,着实不太方便。这两个键相距太远,按键成本太高了。因此我们首先需要将它更换为距离更近的Ctrl+a组合键,或者不常用的 ` 键(当然其他键也是可以的)。 tmux的用户级配置文

Conda + cuda + cudnn + tensorflow-GPU + keras-GPU

1) nvidia-smi 2) conda create --name tf1-gpu 3) conda install tensorflow-gpu==1.15.0 ## will auto-install cuda and cudnn for version of nvidia-smi 4) conda install keras-gpu Question: 1) ==>Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR from keras.backend.tensorflow_backend import set_session import tensorflow as tf config = tf.ConfigProto() ### dynamically grow the memory used on the GPU config.gpu_options.allow_growth = True ### to log device placement (on which device the operation ran) config.log_device_placement = True ### set this TensorFlow session as the default session for Keras sess = tf.Session(config=config) set_session(sess)  控制GPU资源使用率 # 使用allow_growth option,刚一开始分配少量的GPU容量,然后按需慢慢的增加,由于不会释放 #内存,所以会导致碎片 2) Tensorflow中tf.ConfigProto()详解 import tensorflow as tf session_config = tf.ConfigProto(       log_device_placement=True,       inter_op_parallelism_threads=0,       intra_op_parallelism_threads=0,       all

使用开源软件 enfuse 做照片的曝光合成

所谓曝光合成就是对同一场景用不同的曝光量拍摄多张照片,然后将这些照片再合成为一张照片。之所以我们要这么做是因为现在的相机感光的动态范围相比人眼实在是太小了,经常在一幅照片中暗处太暗,亮处过曝。曝光合成就是针对这种情况提出的算法。 在曝光合成算法出现之前,还有另外一种解决这个问题的手段,就是所谓的 高动态图像 (HDR) 技术。我们通常的图片是用 8 bit 来表示每个颜色分量的,所谓 HDR 就是用更多的位数来存放每个像素的亮度信息,甚至有些 HDR 的图像格式直接用浮点数来存储每个像素。如何得到 HDR 图像呢,有些相机直接可以输出,更多的还是通过不同曝光量的几张照片合成。可是我们通常的显示设备,比如液晶显示器,实际上是显示不了那么大的亮度变化的。所以在显示图像时,还要将 HDR 图像转化为通常的 LDR 图像。这个过程叫做 tone mapping。 tone mapping 的质量直接决定了最后显示出的图像的质量。关于 tone mapping 相关的论文很多,各种方法各有优缺点吧。 在 2007 年,Tom Mertens、Jan Kautz、Frank Van Reeth 提出了一种 Exposure Fusion 技术,这种技术不用先合成 HDR 图像,直接融合几张照片的信息,生成一副保留了各幅图像细节的合成图片。这个技术也就是今天要讲的曝光合成技术。 关于曝光合成的具体算法建议大家直接去看那篇经典的论文,这里不多介绍了。今天只介绍一个非常优秀的开源的图像融合软件 enfuse。软件的主页在这里: http://enblend.sourceforge.net/ 下面是一个小例子。我们有三张同一场景不同曝光量的照片。 IMG_9477.JPG IMG_9476.JPG IMG_9478.JPG 这三张照片是用佳能450D 单反相机的曝光包围功能拍摄的,三张曝光量依次增加 2EV。 enfuse 是个命令行软件,下面的命令需要 enfuse.exe 所在的路径在 PATH 环境变量中。否则会找不到这个命令。 enfuse.exe -o out.jpg --compression=100 --contrast-weight=0.0 --exposure-weight=1.0 --saturation-weight

Markdown

使用 # 号标记 使用  #  号可表示 1-6 级标题,一级标题对应一个  #  号,二级标题对应两个  #  号,以此类推。 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 字体 Markdown 可以使用以下几种字体: *斜体文本* _ 斜体文本 _ **粗体文本** __ 粗体文本 __ ***粗斜体文本*** ___ 粗斜体文本 ___ Markdown 列表 Markdown 支持有序列表和无序列表。 无序列表使用星号( * )、加号( + )或是减号( - )作为列表标记: * 第一项 * 第二项 * 第三项 + 第一项 + 第二项 + 第三项 - 第一项 - 第二项 - 第三项 Markdown 区块 Markdown 区块引用是在段落开头使用  >  符号 ,然后后面紧跟一个 空格 符号: 另外区块是可以嵌套的,一个  >  符号是最外层,两个  >  符号是第一层嵌套,以此类推: > 最外层 > > 第一层嵌套 > > > 第二层嵌套 Markdown 代码 如果是段落上的一个函数或片段的代码可以用反引号把它包起来( ` ),例如: `printf()` 函数 代码区块 代码区块使用  4 个空格 或者一个 制表符(Tab 键) 。 你也可以用  ```  包裹一段代码,并指定一种语言(也可以不指定): ```javascript $(document).ready(function () { alert('RUNOOB'); }); ``` Markdown 表格 Markdown 制作表格使用  |  来分隔不同的单元格,使用  -  来分隔表头和其他行。 语法格式如下: | 表头 | 表头 | | ---- | ---- | | 单元格 | 单元格 | | 单元格 | 单元格 | 我们可以设置表格的对齐方式: -:  设置内容和标题栏居右对齐。 :

Build a Mobile Application With the Kivy Python Framework

Build a Mobile Application With the Kivy Python Framework Installation Buildozer itself doesn’t depend on any library Python >= 3.3. Depending the platform you want to target, you might need more tools installed. Buildozer tries to give you hints or tries to install few things for you, but it doesn’t cover every situation. First, install the buildozer project with: pip3 install -- user -- upgrade buildozer Targeting Android Android on Ubuntu 18.04 (64bit) (expected to work as well in later version, but only regularly tested in the latest LTS) sudo apt update sudo apt install -y git zip unzip openjdk-8-jdk python3-pip autoconf libtool pkg-config zlib1g-dev libncurses5-dev libncursesw5-dev libtinfo5 cmake libffi-dev pip3 install --user --upgrade cython virtualenv # the --user should be removed if you do this in a venv # add the following line at the end of your ~/.bashrc file export PATH=$PATH:~/.local/bin/ Then, create a new folder and naviga