主頁 > 軟體工程 > 如何用百度大腦文字識別技術,快速集成實用小工具

如何用百度大腦文字識別技術,快速集成實用小工具

2020-09-11 11:34:43 軟體工程

一、總體概述

本文主要介紹了由本人開發的、基于百度AI的云貓OCR軟體的主要功能,性能評價及核心代碼解讀,因為是幾個帖子合并成一個,所以篇幅較長,希望各位能耐心看完,當然也可以各取所需,

本文主要分為以下幾個部分:
第一部分是云貓OCR軟體介紹, 由開發者本人親自介紹軟體的主要功能,對標ABBYY等OCR軟體,云貓OCR的功能更全面,使用更簡單,關鍵的是云貓OCR目前是完全免費給大家用的,當然因為是試用版,可能存在一些bug,大家使用的時候不要亂按就行,云貓展示版本的下載地址見帖子:  https://ai.baidu.com/forum/topic/show/955975
第二部分是云貓OCR基于百度OCR的具體實作方式說明, 同時也會對軟體的部分核心代碼進行展示,便于大家進行參考做出更有創意的產品,
第三部分是云貓OCR使用說明及效果評測, 但因為云貓OCR是2017年底左右開發的,所以用的不是百度OCR最新介面功能,如果云貓能得到大家的支持,我可以考慮開發新版接入更多百度最新的AI介面,希望大家能多多捧場,
本文的最后部分是附錄,附上了我基于百度OCR進行開發的代碼解讀,使用的是最新的百度手寫體識別介面,也一并打包給大家參考,

第一部分  云貓OCR的軟體介紹

一、云貓OCR簡介

   云貓OCR是基于百度云OCR演算法,由進擊的狐貍進行開發的一款軟體,本軟體由C#語言進行開發,運行在Windows平臺上,主要呼叫的介面是通用文字識別、通用文字識別(高精度)和表格識別等,

二、云貓OCR目前實作的主要功能:

1.批量圖片文字識別,可以預覽圖片,可以對識別結果進行自動換行和縮進,可以控制QPS并發(QPS功能因為百度云的timeout問題而暫時擱置);

2.批量表格圖片識別,支持自動打開識別結果,用戶也可以選擇直接打開保存目錄;

3.PDF轉圖片,在我的筆記本(配置為I7處理器/8G記憶體/128G SSD硬碟)的硬體環境下,PDF轉圖片程式模塊占用的記憶體不超過400M,同時可以在2分鐘左右的時間內轉換超過500頁內容的PDF檔案,支持一鍵打開轉換結果檔案夾,

4.云貓軟體支持換膚功能,目前有兩套皮膚;

5.可以設定API Key和Secret Key;

6.支持中途停止識別;

7.支持把設定改變后對同一張圖片進行重新識別;

8.支持多種語言;

9.其他功能,比如識別統計資訊、控制字體大小、右鍵把識別結果另存為rtf檔案、全選和復制識別結果等等;

三、演示帖子鏈接

http://ai.baidu.com/forum/topic/show/492371

四、云貓OCR演示視頻鏈接

https://v.qq.com/x/page/r0564n4a87e.html

建議大家用1.2x或者1.5x倍速觀看,因為本人的聲速有點慢,

第二部分  云貓OCR基于百度OCR的具體實作方式說明

一、概述

   云貓OCR是基于百度AI,在Windows平臺運行的一款軟體,我是用C#語言在Visual Studio2017集成開發環境中進行開發的,開發方式是SDK包開發,在開發中,我們需要參考百度的技術檔案,

百度云文字識別技術檔案地址:

https://cloud.baidu.com/doc/OCR/index.html

二、準備作業

首先,我們需要下載最新的百度文字識別的SDK包,

C# SDK包的下載地址如下:

http://ai.baidu.com/sdk#ocr

下載完畢后解壓縮,最新的包在檔案夾net45里面,

打開Visual Studio2017開發環境,選擇新建專案,因為我打算用控制臺專案講解,因此要選擇新建專案——C#控制臺專案,建好專案之后,需要在專案中參考上面下載的SDK包,

三、核心代碼講解

(一)呼叫百度OCR函式識別圖片文字,回傳的格式為Json

代碼如下:

using System;

using Newtonsoft.Json;

using Newtonsoft.Json.Linq;

using System.IO;

using System.Drawing;

using System.Collections.Generic;

using System.Linq;

 

namespace myOCRDemo

{

    class Program

    {

        public static void GeneralBasicDemo()

        {

            // 設定APPID/AK/SK

            var API_KEY = "你的 Api Key";

            var SECRET_KEY = "你的 Secret Key";

            //創建物件

            var client = new Baidu.Aip.Ocr.Ocr(API_KEY, SECRET_KEY);

            client.Timeout = 60000;  // 修改超時時間

            var image = File.ReadAllBytes("圖片檔案路徑");

            // 呼叫通用文字識別, 圖片引數為本地圖片,可能會拋出網路等例外,請使用try/catch捕獲

            var result = client.GeneralBasic(image);

            Console.WriteLine(result);

        }

        static void Main(string[] args)

        {

            GeneralBasicDemo();

            Console.Read();

        }

    }

}

注意,具體開發的時候要把上面的API Key和Secret Key分別改為你自己的,至于怎么申請和查看這兩個Key,可以參考我寫的評測篇帖子,帖子鏈接如下:

http://ai.baidu.com/forum/topic/show/955989

另外不要忘了把圖片檔案路徑改為你自己的圖片路徑,下面是識別的結果示例:

原圖如下:

(二)決議Json格式,把識別結果轉變為更為直觀的文本型別

代碼如下:

using System;

using Newtonsoft.Json;

using Newtonsoft.Json.Linq;

using System.IO;

using System.Drawing;

using System.Collections.Generic;

using System.Linq;

 

namespace myOCRDemo

{

    class Program

    {

        public static void GeneralBasicDemo()

        {

            // 設定APPID/AK/SK

            var API_KEY = "你的Akey";

            var SECRET_KEY = "你的SKey";

            //創建物件

            var client = new Baidu.Aip.Ocr.Ocr(API_KEY, SECRET_KEY);

            client.Timeout = 60000;  // 修改超時時間

            var image = File.ReadAllBytes(@"你的圖片路徑");

            // 呼叫通用文字識別, 圖片引數為本地圖片,可能會拋出網路等例外,請使用try/catch捕獲

            var result = client.GeneralBasic(image);

            //決議Json的代碼

            JObject jo = (JObject)JsonConvert.DeserializeObject(result.ToString());

            int num = (int)jo["words_result_num"];

            string[] words = new string[num];

            for (int i = 0; i < num; i++)

                words[i] = jo["words_result"][i]["words"].ToString();

            //回傳值

            string txtOCR = null;

            for (int i = 0; i < num; i++)

                txtOCR += words[i] + "\n";

            //顯示結果

            Console.WriteLine(txtOCR);

        }

        static void Main(string[] args)

        {

            GeneralBasicDemo();

            Console.Read();

        }

    }

}

程式運行結果如下:

這樣就比較符合人類的閱讀習慣了,上面這段代碼也是核心的基礎代碼,可以通過這些核心的代碼去做一些優化,比如自動換行、自動縮進、根據語言習慣自動改變標點符號等等,

(三)表格識別

百度的表格文字識別的編程較為麻煩,主要分成兩步:第一步是提交表格文字識別請求,獲得requestId;第二步是根據requestId獲取表格文字識別的結果,默認是Excel檔案格式,Json結果會回傳一段下載地址,

我的程式除了上面這兩步以外,還添加了自動下載Excel檔案到本地電腦的代碼,供各位參考,另外要注意的是,提交識別請求和獲得識別結果這兩步之間,程式必須設定延時,否則不能獲得下載的URL ,經過實際測驗,延時為3秒以上較為合適,3秒以下可能會出錯,

代碼如下:

/// 

 

        /// 表格文字識別

        /// 

 

        public static void myTableRecognitionRequestDemo()

        {

            // 設定APPID/AK/SK

            var API_KEY = "你的API Key";

            var SECRET_KEY = "你的Secret Key";

            //創建物件

            var client = new Baidu.Aip.Ocr.Ocr(API_KEY, SECRET_KEY);

            client.Timeout = 60000;  // 修改超時時間

            var image = File.ReadAllBytes(@"F:\表格圖片1.jpg");//這里要改成你的表格圖片路徑

            // 呼叫表格文字識別,可能會拋出網路等例外,請使用try/catch捕獲

            var result = client.TableRecognitionRequest(image);

            //決議Json

            JObject jo = (JObject)JsonConvert.DeserializeObject(result.ToString());

            string requestId = jo["result"][0]["request_id"].ToString();

            Console.WriteLine("獲得requestId:"+requestId);

            //延時3秒,這句是必須的

            System.Threading.Thread.Sleep(3000);

            //獲取表格識別結果

            //有時會得不到鏈接,需要多嘗試幾次

            var resultExcel = client.TableRecognitionGetResult(requestId);

            Console.WriteLine("獲得的表格識別結果如下:");

            Console.WriteLine(resultExcel);

            //決議Json,獲得鏈接

            JObject joResult = (JObject)JsonConvert.DeserializeObject(resultExcel.ToString());

            string excelURL = joResult["result"]["result_data"].ToString();

            Console.WriteLine("獲得的Excel檔案下載地址是:\n" + excelURL);

            //自動下載Excel檔案到電腦

            WebClient df = new WebClient();

            df.DownloadFile(excelURL, @"F:\識別結果.xls");//這里要改成你的下載檔案路徑

            Console.WriteLine("下載完畢");

        }

作者使用的測驗用圖片:

表格文字識別結果截圖:

尾記:本文的示例代碼都是最新的代碼,跟百度SDK檔案里面的代碼是一致的,而云貓OCR是2017年末就已經寫好的了,代碼有些陳舊,所以沒直接貼源代碼了,

代碼篇的原帖子地址:

http://ai.baidu.com/forum/topic/show/956037

第三部分  云貓OCR的使用說明及效果評測

一、概述

   筆者是在2017年接觸百度云服務平臺的,在這里我也稱之為百度AI ,筆者根據百度AI提供的函式介面,自行編程實作了一款OCR軟體——云貓OCR,云貓OCR大部分的代碼開發是在2017年底前完成的,之所以雪藏到現在,是因為筆者的一些私人事務(小孩出生等)——我是利用業余時間進行軟體開發的,所以中斷了大概一年多的時間,現在才有空繼續這個專案,

評測篇的原帖子地址:

http://ai.baidu.com/forum/topic/show/955989

二、評測的具體內容

(一)準備作業

   在使用云貓OCR之前,我們必須先去百度云官網進行注冊賬號,有了賬號以后,我們還要去具體的云服務專案下申請API Key和Secret Key ,一般這兩個Key是用戶各人保管的,不能隨便透露給外人,因為百度云現在已經正式收費,而用戶每人每天的免費呼叫次數都是有限的,提高限額需要支付費用,用戶使用百度云AI介面的依據主要就是這兩個Key,所以我們要保管好,下面是簡單的準備作業圖片說明:

(二)正式使用云貓OCR

用戶有了百度云API Key和Secret Key之后,就可以正式使用云貓OCR了,具體使用步驟如下:

(三)評測的具體內容

   首先介紹一下云貓OCR呼叫的百度AI的主要介面,首先是通用文字識別(帶位置版),其次是通用文字識別(帶位置高精度版),最后是表格文字識別,下面依次介紹這三種識別,

1. 通用文字識別(帶位置版)和通用文字識別(帶位置高精度版)的混合使用

如上圖所示,用戶可以選擇多種語言(包括德語、法語、西班牙語等等),選擇好后點擊文字識別即可,因為百度云提供的高精度文字識別介面只支持中英文,而通用的文字識別支持除中英文以外的多種語言,所以筆者在撰寫軟體中,這兩種介面是混合使用的,具體怎么混合使用請看代碼篇,一般情況下,高精度的文字識別效果比通用的好,但也比較耗時,

本軟體支持識別的文字結果在本機保存為檔案,具體如下圖操作:

保存的檔案是rtf格式,可以用WPS或者Office Word打開,下面再給出一次性識別20張圖片的統計結果圖示:

從上圖可以看出,百度云的文字識別結果速度還是不錯的,識別速度是平均大概2-3秒一張圖,

2. 表格文字識別

表格文字識別的主要步驟如下圖所示:

識別的結果軟體會自動保存為Excel檔案并打開,如圖:

從上圖可以看出,表格文字識別的速度比普通文字識別要慢一些,大概需要5-6秒,

評測總結:百度OCR對于印刷體的識別還是不錯的,比起以前的OCR軟體來說,百度OCR可以說是革命性的進步,當然,它也有自己的短板,比如手寫體的識別,筆者還沒有評測,但百度云通用文字高精度介面對手寫體的識別是較差的,再比如QPS并發,我的理解是可以提高OCR文字識別的速度,對于大量的圖片文字識別來說尤其是重要,可以節省大量時間,但遺憾的是,百度云對并發好像做的不太好,程式不一定支持QPS并發,這個缺點我們也是希望百度后面能夠有所改正,

 

附錄:

C#編程實作手寫識別

一、概述

    本人是用C#編程,呼叫百度API介面實作手寫體識別的,參考了百度的產品檔案,

檔案地址:https://cloud.baidu.com/doc/OCR/index.html

二、代碼及解說

本人的源代碼大部分是來自百度的產品檔案,但其中也遇到了一些麻煩,比如文字識別的編碼問題,百度的代碼給出的編碼是Default,但在我的機器上這樣做會顯示亂碼,經過查找資料,我把編碼改成UTF8,亂碼的問題才得到解決,

作者的所有源代碼如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Net.Http;

using Newtonsoft.Json;

using Newtonsoft.Json.Linq;

using System.IO;

using System.Drawing;

using System.Web;

using System.Net;

 

namespace myHandwrite

{

    public static class FileUtils

    {

        /// 

 

        /// 轉base64編碼

        /// 

 

        /// 

        /// 

        public static String getFileBase64(String fileName)

        {

            FileStream filestream = new FileStream(fileName, FileMode.Open);

            byte[] arr = new byte[filestream.Length];

            filestream.Read(arr, 0, (int)filestream.Length);

            string baser64 = Convert.ToBase64String(arr);

            filestream.Close();

            return baser64;

        }

    }

    class Program

    {

        // 呼叫getAccessToken()獲取的 access_token建議根據expires_in 時間 設定快取

        // 回傳token示例

        public static String TOKEN = "24.adda70c11b9786206253ddb70affdc46.2592000.1493524354.282335-1234567";

 

        // 百度云中開通對應服務應用的 API Key 建議開通應用的時候多選服務

        private static String clientId = "這里改成你的API Key";

        // 百度云中開通對應服務應用的 Secret Key

        private static String clientSecret = "這里改成你的Secret Key";

        /// 

 

        /// 獲取token的函式

        /// 

 

        /// 

        public static String getAccessToken()

        {

            String authHost = "https://aip.baidubce.com/oauth/2.0/token";

            HttpClient client = new HttpClient();

            List> paraList = new List>();

            paraList.Add(new KeyValuePair("grant_type", "client_credentials"));

            paraList.Add(new KeyValuePair("client_id", clientId));

            paraList.Add(new KeyValuePair("client_secret", clientSecret));

 

            HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;

            String result = response.Content.ReadAsStringAsync().Result;

            //Console.WriteLine(result);

            //自己加的代碼

            JObject jo = (JObject)JsonConvert.DeserializeObject(result.ToString());

            string myToken = jo["access_token"].ToString();

            Console.WriteLine("獲得的Token是:" + myToken);

            return myToken;

        }

        

        /// 

 

        /// 手寫體文字識別

        /// 

 

        /// 

        /// 

        /// 

        public static string myHandwriting(string token,string filename)

        {

            //string token = "#####呼叫鑒權介面獲取的token#####";

            // 圖片的base64編碼

            string strbaser64 = FileUtils.getFileBase64(filename); 

            string host = "https://aip.baidubce.com/rest/2.0/ocr/v1/handwriting?access_token=" + token;

            Encoding encoding = Encoding.Default;

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);

            request.Method = "post";

            request.ContentType = "application/x-www-form-urlencoded";

            request.KeepAlive = true;

            //這里加上了一些引數

            String str = "recognize_granularity=big&image=" + HttpUtility.UrlEncode(strbaser64);

            byte[] buffer = encoding.GetBytes(str);

            request.ContentLength = buffer.Length;

            request.GetRequestStream().Write(buffer, 0, buffer.Length);

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            //顯示結果是亂碼,嘗試改變編碼,經過測驗需要改成UTF8編碼

            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);

            string result = reader.ReadToEnd();

            Console.WriteLine("手寫文字識別:");

            //Console.WriteLine(result);

            //決議Json的代碼

            JObject jo = (JObject)JsonConvert.DeserializeObject(result.ToString());

            int num = (int)jo["words_result_num"];

            string[] words = new string[num];

            for (int i = 0; i < num; i++)

                words[i] = jo["words_result"][i]["words"].ToString();

            //回傳值

            string txtOCR = null;

            for (int i = 0; i < num; i++)

                txtOCR += words[i] + "\n";

            //顯示結果

            Console.WriteLine(txtOCR);

            return txtOCR;

        }

        static void Main(string[] args)

        {

            //這里要改成你的圖片路徑

            string filename = @"F:\手寫體5.jpg";

            string token = getAccessToken();

            myHandwriting(token,filename);

            Console.Read();

        }

    }

}

注意,上面的代碼中需要各位改成自己的Akey和Skey,另外要改一下圖片路徑,如果回傳的是亂碼,還需要改一下編碼,

識別的結果如下:

程式用的圖片檔案如下:

作者kohakuarc

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/5475.html

標籤:其他

上一篇:免費領取16套深度學習權威實踐課,從零基礎小白到大牛

下一篇:【全代碼攻略】用百度大腦手寫文字識別助力企業降本增效

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more