2017年12月12日 星期二

Visutal studio 2017 更新後 CUDA9.0 出錯 如何更正

Visutal studio 2017 更新後 CUDA9.0 出錯 如何更正

上次的更新拿掉了一些更新,這次的更新 CUDA9.0 也變得不支持了,而且沒辦法降低版本。解決辦法可以安裝先前的套件,他就會自動運行了。
錯誤訊息
unsupported Microsoft Visual Studio version! Only the versions 2012, 2013, 2015 and 2017 are supported!

Step1

開始搜尋 Visual Studio Installer 開啟安裝檔案程式,然後選擇修改
install this package
裝回來之後 VS2017 重啟之後就可以編過 cuda 測試的代碼了
then restart VS2017

Step2

改變方案版本

Select Visual Studio 2015

other

但是這還是有問題,我不知道為何改過之後他就不會自動重新編譯檔案了,即便我更改了代碼,解決辦法就是使用 Ctrl+F7 重新編譯所有檔案。
這個可能不是好辦法,專案如果很大不可能每次都重新編譯所有檔案,最好的辦法只能等待CUDA更新或是乾脆降板使用 VS2015,使用舊版的 VS2017。
But this have a problem.
VS can not rebuild file.
Even if change code.
Use Ctrl+F7 rebuild all file.
or reinstall old version visual studio.

參考 Referance

2017年12月10日 星期日

Win10 電腦關機之後會馬上再次開機

Win10 電腦關機之後會馬上再次開機

發生在我的 AMD飛龍 945 上面,主要就是突然就變得關機之後關不掉,會在自動啟動休眠也是一樣的狀況很困擾。
最後忽然想到筆電關機會一片黑也處理過,是不是也是網卡的問題,安裝了驅動並關閉電源內的快速啟動果然解決問題了。
網卡驅動的部分,必須更新到提供者是廠商,比如說Realtek,提供者是微軟都會出問題。
如果是英特爾的電腦還要補裝IME驅動才會好。
這是之前筆電黑屏的文章,我想應該是一樣的狀況
https://charlottehong.blogspot.tw/2016/08/e5-491g-w10.html
整理一下狀況
  1. EFI才支援快速啟動
  2. 微軟的網卡驅動雷翻了
  3. 微軟的的IME驅動也是雷翻了
解決辦法就是能夠EFI安裝最好就用EFI安裝了,直接裝好都沒事。

通用解法

真的要用MBR裝,或者像我一樣主機板根本就沒EFI可以用QuQ
  1. 必須關閉快速啟動(沒的選)
  2. 網卡驅動一定要裝廠商給的(如realtek)
  3. IME驅動一定要補(AMD不用補)
快速啟動從電源裡面關
把下面那個打勾取消掉
如果還是不行試試看這個,這個我猜測是跟IME有關~應該補好驅動就沒事了
搜尋 msconfig 開啟,然後上面頁簽選到服務頁面,記得點一下名稱讓他用名稱排序
至於快速啟動不想關也有解決辦法,關機的時候按住SIFT然後滑鼠在下關機,再來就可以放開SIFT了,這樣下次就會正常啟動了(要重跑開機檢查一堆有的沒的而不是從硬碟複製檔案);這招也會用來按重新開機進入安全模式,一樣的原理快速啟動是不給你進安全模式的,因為要速度什麼都捨棄了。

2017年12月8日 星期五

Opencv320 Contrib 安裝懶人包

Opencv320 Contrib 安裝懶人包

使用方法:
  1. 自行安裝好 VS2017
  2. 開啟安裝後點擊安裝
  3. 自動開啟 VS2017 按F5編譯
  4. 彈出成功信息
版本不一樣編譯的時候可能會出現一點小問題重訂專案目標即可

2017年12月2日 星期六

windows powershell 如何安裝 pycrypto

Windows powershell python3 如何安裝 pycrypto

  1. open “x86_x64 Cross-Tools Command Prompt for VS 2017” with administrator privilege in start menu.
  2. set CL=-FI”%VCINSTALLDIR%Tools\MSVC\14.11.25503\include\stdint.h”
  3. pip install pycrypto
第一個是一個捷徑的名字,位置在
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2017\Visual Studio Tools\VC
地二個其中 VCINSTALLDIR 這麼變量好像沒有,可以手動取代成
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\

參考

2017年12月1日 星期五

Hover Zoom+ chrome 擴充套件,自動放大圖片

Hover Zoom+ chrome 擴充套件,自動放大圖片

效果圖如下,這是把滑鼠移動到圖片上的狀況
他就自己放大了,滑鼠離開就自己消失了很方便瀏覽的,這個在其他網站也可以使用,比如說推特或是FB,如果需要下載圖片可以把滑鼠移動到圖片上放大之後按一下 S 就自動儲存原圖了,是原圖歐不是縮小的圖非常方便。
FB上可能會干擾到這時候可以選擇禁止這個網站就好了,進入設定的網頁
chrome-extension://pccckmaobkjjboncdfnnofkonhgpceea/html/options.html
輸入FB的網站即可
加入之後底下記得按SAVA儲存,然後FB要重新整理一次

2017年11月28日 星期二

Centos7 配置 Samba 共享資料夾和印表機

Centos7 配置 Samba 共享資料夾和印表機

弄了好久,看了往上好多文章大多數中文的都是那幾篇的變形,照著做還是開不起來,其中中有很多原因,他們只提到一部分而已我猜應該不是全新作業系統去安裝的教程,或者是更新之後變的更安全需要額外開啟權限。
設置完畢之後直接從Windwos上的資料夾打上 \ip 即可連接上,進入網路上的芳鄰是看不到的。

Samba初始化過程

配置完成即可連上,並可見登入使用者的目錄
# 配置smb.conf
vi /etc/samba/smb.conf
[User1]
    read only = No
    guest ok = No
    valid users = user
    browseable = yes

# 新增帳號+重設密碼
smbpasswd -a user
# 刪除帳號
pdbedit -x user

#防火牆允許通過
firewall-cmd --permanent --zone=public --add-service=samba
#SElinux允許通過
setsebool -P samba_enable_home_dirs 1
setsebool -P samba_export_all_ro 1
setsebool -P samba_export_all_rw 1

# 設置文件屬性(好像不用不行再打)
chcon -R -t samba_share_t /home/chg
semanage fcontext -a -t samba_share_t "/home/chg(/.*)?"

# 重新啟動 Samba
systemctl restart smb
# 查看 Samba 是否正確運行中
systemctl status smb

#其他 Samba 指令
systemctl start smb
systemctl enable smb

建立公用資料夾 (大家看的到)

# 新建資料夾
mkdir /var/samba_share
mkdir /var/samba_share/public

# 資料夾更改權限(任何人可見可修改)
chmod 777 /var/samba_share/public
# 資料夾改權限(任人可見僅擁有者可修改)
chmod 755 /var/samba_share/public

# 修改 vi /etc/samba/smb.conf 文件
[public]
    public = yes
    path = /var/samba_share/public
    browseable = yes
    writable = yes
    guest ok = yes

# 重新啟動 Samba
systemctl restart smb

新增其他使用者

如果要新增第二個使用者需要做的步驟有
  1. 加入samba群組 smbpasswd -a user
  2. 配置 smb.conf 文件
  3. 重啟 samba 伺服器 systemctl restart smb

關於SElinux

沒有關閉預設狀態什麼都不能用,必須設置指令開啟才可以使用
他自己從右上角通知跳出來警告,然後警告裡面有教怎麼做
#暫時關閉SElinux(重開機會啟動)
setenforce 0
#確認有無關閉SElinux
getenforce

#開通三個布林值
setsebool -P samba_enable_home_dirs 1
setsebool -P samba_export_all_ro 1
setsebool -P samba_export_all_rw 1

#這兩個警告跳出來的要我按,我不確定要幹嘛的
ausearch -c 'smbd' --raw | audit2allow -M my-smbd
semodule -i my-smbd.pp

windwos端設定

開進去網路芳鄰之後直接點印表機右鍵連線就可以用了。
查了一些指令設置如下
# 安裝裝驅動
pnputil -a \\driver.inf

# 連線至印表機
rundll32 printui.dll,PrintUIEntry /in /n \\YourIP\dcp7040

# 新增主機名稱
set hostdir=%SystemRoot%\System32\drivers\etc\hosts
echo. >> %hostdir%
echo YourIP ServerName >> %hostdir%
START %SystemRoot%\explorer.exe \\ServerName

其他

2017年11月26日 星期日

Windows系統 GPT(EFI) 轉 MBR 無損資料可開機不須重灌系統

Windows系統 GPT(EFI) 轉 MBR 無損資料可開機不須重灌系統

如果是反過來 MBR->GPT 的請參考:
http://charlottehong.blogspot.com/2017/11/windows-mbr-gptefi.html

需要一個獨立系統

需要一個獨立系統,這裡建議把硬碟拆下來裝在第二台台電腦上並安裝以下軟體;其他方法可以在USB安裝WindowsRE用USB啟動去做,因為有些複雜就不介紹了,這裡會用第二台電腦做說明。
另外教程文件截圖的時候有發生一件事情就是我在第二台電腦怎麼樣都轉不過去MBR最後是直接在原本的電腦用USB啟動WinPE去修改的。
理論上同一個軟體應該沒問題才是,把第二台電腦新開機可能會好有遇到的人可以試試看。
需要軟體diskgenius:http://www.diskgenius.cn/download.php

GPT -> MBR

1.分割調整至4個以內,EFI分區可直接移除
2.直接轉成MBR -> 然後重啟系統或拔掉重插
3.將啟動分區標記為”啟動”
4.下面指令重新寫入BIOS引導文件
# C是你的系統曹,第二個C是啟動磁區(如果有分開這裡要改)
bcdboot C:\windows /f ALL /s C:\ /l zh-tw
ALL那邊也可以使用BIOS,個人猜測可以讓EFI不開CSM就啟用MBR系統吧~

前面那一小段也可以切成啟動磁區,就是安裝Win7會跑出來的那個100M(Win10是300M),格式不限NTFS或者是FAT都可以,唯一條件就是必須標記為啟動。
因為也不大,100M~500M不痛不癢建議留著之後方便
如果要求完美軟體內可以合併空間。不過之後反悔也可以無損切回來啦~

Windows系統 MBR 轉 GPT(EFI) 無損資料可開機不須重灌系統

Windows系統 MBR 轉 GPT(EFI) 無損資料可開機不須重灌系統

如果是反過來的 GPT -> MBR 請參考:
http://charlottehong.blogspot.com/2017/11/windows-gptefi-mbr.html

快速轉換 mbr2gpt

後來才發現微軟有出一個工具 mbr2gpt.exe 可以幫你轉換,參考微軟網站:https://docs.microsoft.com/zh-cn/windows/deployment/mbr-to-gpt
使用方式比較簡單,不用第二台電腦
  1. 按住SIFT重新開機進入安全模式選擇命令提示符,開啟終端機
  2. 輸入 mbr2gpt /validate 檢查是否可轉
  3. 輸入 mbr2gpt /convert 轉換完畢
  4. 重開機並設置UEFI啟動即可
下面是之前寫的文章,上面介紹的工具比較簡單但是有一些條件限制,如果有什麼狀況轉不過可以參考下面的解法,有完整的工具可以處理。

前言

大概補一下前言知識GPT跟MBR是磁碟格式,以前的主機板內的韌體叫做BIOS他是16位元的,後來出了EFI大概一年就淘汰換UEFI。
BIOS基於16位元的關係磁碟最多就只能切2T,所以你如果裝1顆3T的硬碟,要麼你切1T+2T要麼就只能換GPT。
MBR 最多切4個分區,擴展分區全部和算算一個,如果要在同一顆硬碟安裝4個以上的系統需要一些技巧。
UEFI可以支援傳統MBR模式開機,這個選項叫做CSM開啟之後也可以讀到,不過今年開始新版的UEFI拿掉了CSM,XP已經成為歷史沒辦法在新主機板安裝了。
UEFI多了安全開機,系統必須有被他檢測過才可以開機,這導致linux安裝稍微麻煩了點(是能裝的)。
UEFI 多了快速啟動開機可以神速開到桌面,不過啟動條件比較多需要 1.系統本身支持並啟用 2.安裝系統的時候選用EFI安裝 3.主機板支持並且啟用該功能 4.其他周邊硬件:如顯示卡。
此外IDE跟AHCI是另一回事,這個也可以無損轉要補驅動但是建議重灌保險;轉了之後比較容易發生衝突問題變得怪怪的。

開機引導

UEFI的開機管理比較特別一點,可以由BIOS裡面決定要開哪一個系統,對就是選系統(也就是EFI內的哪一個啟動文件),有趣的是這個選擇完畢開進去之後也會啟動grub或bcd,然後又可以再選一次系統。
以往MBR的硬碟BIOS只能決定開哪一個硬碟的grub或bcd無權決定開誰,之後再由grub或bcd決定開哪一個系統(這時候也可以開別的硬碟的系統)。
Linux比較特別的EFI啟動的時候會有兩個EFI文件檔,就是BIOS裡面會看到兩個系統,一個是沒過驗證的grub這個如果安全啟動沒開不能開機,另一個是有過安全啟動驗證的,如果你沒關閉安全啟動記得要選否則預設是grub會黑屏不能開機。
某些筆電設計成必須設置密碼才能選擇載入其他EFI文件選擇第二個系統開機,詳細可以蒐一下參考站內文。


確認你有滿足條件

確定一下你有滿足上面所提的條件,一般就是進入BIOS看一下有沒有一項 Secure Boot安全啟動,這個最好找,有的話就可以啟動EFI了。
顯示卡在自己爬文一下有沒有支持,沒支持也可以拉只是 超級啟動 不能用。

需要一個獨立系統

需要一個獨立系統,這裡建議把硬碟拆下來裝在第二台台電腦上並安裝以下軟體;其他方法可以在USB安裝WindowsPE用USB啟動去做,因為有些複雜就不介紹了,這裡會用第二台電腦做說明。
需要軟體diskgenius:http://www.diskgenius.cn/download.php

轉換流程

記得備份重要資料,避免操作失誤資料遺失
分區如果不見了左上角有個搜尋分割可以救回來

MBR -> GPT

首先擴展分區無法保存資料,請先轉為主分區或備份再重新寫入
某些情況會導致不能讓擴展分區轉為主分區,MBR最多切4個分區(擴展分區則是全部合只算1個),所以如果你切了3個主分區+2個或以上的擴展分區(1個好像也不行),那就沒辦法在同一顆無損轉了,因為轉完之後就超出4個了。
這種情況處理方式建議就拿另一顆來複製資料了。
1.有擴展分區要先處理掉只留主分區
2.直接轉換成GPT -> 然後左上角保存
3.C曹壓縮讓前面空出500M以上的區間
並將其格式調整成EFI,然後保存
再來是新增盤符,需要拔掉硬碟重接才可以新增
4.下面指令重新寫入EFI引導文件
# C = 系統槽, Z = EFI槽
bcdboot C:\windows /f UEFI /s Z:\ /l zh-tw

選用::壓縮系統

在影響效能不大的情況下壓縮系統空間
建議啟用 (實際上利用官方光碟安裝預設也是啟用的)
實測壓縮前容量約 27.1G 壓縮後是 25.7
下面指令等你順利用那顆硬碟開機再輸入。
// 查詢系統檔案 CompactOS 狀態
compact /compactos:query

// 開啟 CompactOS
compact /compactos:always

// 關閉 CompactOS
compact /compactos:never

2017年11月20日 星期一

[原始碼] C / C++ 旋轉 任意角度的圖片

[原始碼] C / C++ 如何旋轉圖片

首先會用到線性插補可以參考這一篇
https://charlottehong.blogspot.tw/2017/11/bilinear.html

旋轉公式

跟上一篇差不多意思線性插補指的是for迴圈去跑新圖,然後縮放對應回去原圖的座標,因為縮放得之後的點可能比較多或比較少,對應回去就會在非整數整數位置,這時候就看比例給數值。
旋轉也是一樣意思,旋轉過後的的點會正好不在點上,旋轉有兩個公式一般看到的就是給輸入原圖得出新圖的座標,這個不是我們要的,因為如果是這樣就不能插補了。
需要的是for去跑新圖座標,輸入新圖座標得到舊圖的座標(非整數),然後再利用線性插補補出來。
公式如下:
float r_rot = (j)*sin_t + (i)*cos_t; // 原圖X座標
float c_rot = (j)*cos_t - (i)*sin_t; // 原圖Y座標
其中 (j, i) 就是新圖的 (y, x) 座標,sin_t 與 cos_t 則是預先算好的數值,因為計算三角函數很費時,建議提出到for迴圈之外先算好,如果再for回圈內就要不斷的重複運算同一個角度浪費效能。
// 預算
float cos_t = cosf(sita*(float)(M_PI/180));
float sin_t = sinf(sita*(float)(M_PI/180));

原點在哪裡

需要注意的是上圖的公式會以圖的左上角 (0, 0) 作為定點轉換,如果需要從中心點旋轉或是任點轉需要轉換一下座標
假如現在要以 (10, 10) 為中心旋轉,那麼在旋轉前你需要先把for迴圈扣調這個範圍,也就是從 (j, i) 要從負號 -10 開始跑,經過旋轉公式計算出來之後還需要將原本的 10 加回來,這樣就可以獲得正確的位置了。
此外獲得正確位置之後還有一個問題就是旋轉後的圖比旋轉前的圖還要大,勢必會計算出超出原圖範圍的點,跑一個if過濾負號與超出原圖長寬的點即可。

範例代碼

只有給主要函式,有部分是已經寫好的函式庫,我有空再補上完整能跑的
(懶懶的~還沒補上又真的有需要然後看不懂可以直接留言問吧~我會看到的)
ImgRaw rotateImg(const ImgRaw& sou, size_t x, size_t y, float radius, float sita) {
    ImgRaw test = sou;
    //test.at2d(x, y) = 1;
    Draw::draw_arrow(test, y, x, radius, sita, 1);
    test.bmp("rotate_test.bmp");
    // 新圖長寬半徑
    float maxRadius = radius;
    int rotH = floor(maxRadius);
    int rotW = floor(maxRadius);
    ImgRaw rotate(rotW*2, rotH*2, 8);
    // 預算
    sita *= -1; // 把新圖轉回0度
    float cos_t = cosf(sita*(float)(M_PI/180));  
    float sin_t = sinf(sita*(float)(M_PI/180));
    // 跑新圖
    for (int j = -rotH; j < rotH; j++) {
        for (int i = -rotW; i < rotW; i++) {
            // 輸入新圖座標返回舊圖座標(已0, 0為圓心旋轉)
            float r_rot = (j)*sin_t + (i)*cos_t; // 原圖X座標
            float c_rot = (j)*cos_t - (i)*sin_t; // 原圖Y座標
            // 矯正回指定位置
            float rbin = r_rot + x; 
            float cbin = c_rot + y;
            // 去除原圖外的點
            if (cbin < sou.height - 1 and cbin > 0) {
                if (rbin < sou.width - 1 and rbin > 0) {
                    // 雙線姓插補
                    rotate.at2d(j+rotH, i+rotW) = test.atBilinear(cbin, rbin); 
                }
            }
        }
    }
    return rotate;
}
ImgRaw 帶有圖像的
  1. 一維陣列
  2. 長寬
  3. 位元數(彩圖灰圖)
  4. 一些方法
線性插補建議寫成一個讀取的,這樣規劃結構還不錯用 atBilinear(y, x) 要是你輸入的點不正好在點上,比如說 (0.5, 0.5) 就算出這個位置的插補值回傳。
這個函式的功能主要為輸入
  1. 點(y, x)
  2. 角度
  3. 半徑
輸出為
  1. 畫出點與半徑的箭頭
  2. 把點與角度轉正向右
  3. 擷取點為中心半徑的距離
其實就是SIFT算法的一小部分,轉正主角度時用到到的