国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

【正經(jīng)的AI on Python入門(mén)系列】1.2 斗圖工具的優(yōu)化——文本寬度自適應(yīng)(來(lái)做點(diǎn)小數(shù)據(jù)分析

fireflow / 3618人閱讀

摘要:在上一篇文章圖工具的優(yōu)化實(shí)現(xiàn)文本居中中,我們已經(jīng)實(shí)現(xiàn)了對(duì)插入字體的左中右對(duì)齊顯示,那因?yàn)樯掀谖恼禄爝M(jìn)去了不少語(yǔ)法講解,所以后面的內(nèi)容就順延到這啦,哈哈哈。

在上一篇文章【圖工具的優(yōu)化——實(shí)現(xiàn)文本居中】中,我們已經(jīng)實(shí)現(xiàn)了對(duì)插入字體的左中右對(duì)齊顯示,那因?yàn)樯掀谖恼禄爝M(jìn)去了不少語(yǔ)法講解,所以后面的內(nèi)容就順延到這啦,哈哈哈。

我比較長(zhǎng)怎么辦啊?

我們的斗圖小工具,現(xiàn)在面臨這一個(gè)苦惱,這些文本他壞,一會(huì)長(zhǎng)一會(huì)短的,一旦有個(gè)很長(zhǎng)很長(zhǎng)的,直接就捅到里面去了,根本顯示不全啊,這咋辦呢?
我稍微想了下,這個(gè)也簡(jiǎn)單,我可以不斷的減小字號(hào),直到我們的空白區(qū)域可以放得下:

    while (CONST_IMG_WIDTH <= textLen + 2*off_set[0]) and fontSize >= 1:
        fontSize -= 1
        imageFont = ImageFont.truetype("./resources/msyh.ttc", fontSize)
        textLen = draw.textsize(text, imageFont)[0]
        print("當(dāng)前字號(hào){},文本寬度{}".format(fontSize, textLen))

看看效果吧:

python emofigther.py 長(zhǎng)的就會(huì)變細(xì)變細(xì)了就能塞下了嘛

效果其實(shí)還是挺好的,就是實(shí)現(xiàn)的方式有點(diǎn)太low了,而且不停的加載字體,看著就覺(jué)得開(kāi)銷(xiāo)很大,那有沒(méi)有更優(yōu)雅的辦法呢?

來(lái)做點(diǎn)小數(shù)據(jù)分析吧

下面我們來(lái)研究一下,字體的字號(hào)大小跟其經(jīng)過(guò)PIL繪制之后的大小有什么關(guān)系,接下來(lái)我們主要會(huì)用到Numpy、matplotlib跟scipy幾個(gè)庫(kù)。
先來(lái)準(zhǔn)備點(diǎn)數(shù)據(jù)樣本,通過(guò)draw.textSize函數(shù),繪制單個(gè)字并獲取其大小:

# 準(zhǔn)備分析數(shù)據(jù)
font_num = []
text_size = []
for i in range(1, 31):
    imageFont = ImageFont.truetype("./resources/msyh.ttc", i)
    text_size.append(draw.textsize("字", font=imageFont))
    font_num.append(i)

借助matplotlib的pyplot模塊,我們可以繪制各種圖像,先讓我們以字號(hào)為x軸,字體寬度為y軸,畫(huà)出樣本的散點(diǎn)圖

import matplotlib.pyplot as plt
#....
# scatter畫(huà)出散點(diǎn)圖,以字號(hào)為x軸,字體寬度為y軸
# 在分析前,先繪制散點(diǎn)圖,對(duì)大致的函數(shù)形狀進(jìn)行分析
plt.scatter(list(map(lambda x: x[0], text_size)), font_num, color="b", label=u"字體寬度")

運(yùn)行之后,會(huì)彈出這樣一個(gè)窗口

好的,從這個(gè)圖片上分析,我們的字號(hào)與寬度是一個(gè)完美的正相關(guān),用函數(shù)來(lái)表示,就是

$$ y=kx+b $$

那問(wèn)題來(lái)了,我們?nèi)绾稳〉胟和b兩個(gè)常數(shù)的值呢,那個(gè)說(shuō)k=1,b=0的同學(xué)你坐下!我們要嚴(yán)謹(jǐn),看出來(lái)了也不要說(shuō)出來(lái)嘛,額,不對(duì),就算是看出來(lái)了,但我們還是要以嚴(yán)謹(jǐn)?shù)姆绞饺プC明他的!為了求出k和b兩個(gè)常數(shù)的最優(yōu)解,我們需要用到scipy.optimize模塊的leastsq函數(shù),這個(gè)函數(shù)實(shí)現(xiàn)了“最小二乘法”算法,通過(guò)不斷的嘗試不同的常數(shù),求出與期望結(jié)果誤差最小的最優(yōu)解,那下面就簡(jiǎn)單介紹一下怎么用leastsq對(duì)函數(shù)進(jìn)行擬合:

首先,我們要定義一個(gè)函數(shù)形狀(一元一次、一元二次、多元多次)

def func_shape(p, x):
    """定義函數(shù)形狀,哈哈哈,就是 y = kx+b 直線!
    Args:
        p: 常數(shù)
        x: 自變量
    Returns:
        函數(shù)運(yùn)算求得的因變量
    """
    k,b = p
    return k*x + b

然后定義一個(gè)誤差計(jì)算函數(shù)

def func_err(p, x, y):
    """定義誤差函數(shù)
    Args:
        p: 常數(shù)
        x: 自變量
        y: 驗(yàn)證因變量
    Returns:
        返回函數(shù)運(yùn)算結(jié)果與驗(yàn)證因變量之間的誤差值
    """
    return func_shape(p, x) - y

使用leastsq函數(shù)進(jìn)行求解,獲取最優(yōu)常量k、b

from scipy.optimize import leastsq

r = leastsq(func_err, p0, args=(_font_size_np[:,0], _font_num_np))
# 計(jì)算結(jié)果中的r[0]為一個(gè)元組,為求得的k和b
k, b = r[0]
# 最后我們得出結(jié)論,擬合結(jié)果為y = x
print("k=",k,"b=",b, "r=", r)


把擬合曲線也畫(huà)在圖標(biāo)上:

# 畫(huà)出擬合線,以字號(hào)為X軸,函數(shù)運(yùn)算結(jié)果為Y軸
plt.plot(X,func_shape((k, b), X),color="orange",label=u"字體寬度擬合",linewidth=2) 


可以看到擬合曲線完美的經(jīng)過(guò)了每一個(gè)數(shù)據(jù)點(diǎn),這基本就可以認(rèn)定我們的擬合曲線基本上就是 y=x了,
當(dāng)然,我們的樣本量現(xiàn)在是非常少的,也非常的規(guī)整,其實(shí)更多情況下,數(shù)據(jù)可能是這樣分布的:

這樣是不是就能體現(xiàn)出擬合的意義了呢?

讓我們把研究成果用在我們的代碼上:
    # 方法2:通過(guò)簡(jiǎn)單的數(shù)據(jù)分析,我們研究出字體寬度 = 字體字號(hào)這一函數(shù)
    def char_len(text_size):
        return text_size
    # 減小字號(hào),直到 字?jǐn)?shù)*單位寬度 適應(yīng)空白區(qū)域?qū)挾?    while char_len(fontSize) * len(text) > (CONST_IMG_WIDTH - 2*off_set[0]):
        fontSize -= 1

學(xué)霸們,動(dòng)起來(lái)!

如果有小伙伴們看到這個(gè)章節(jié),對(duì)本章節(jié)描述的數(shù)據(jù)分析過(guò)程非常感興趣,而且覺(jué)得自己的數(shù)學(xué)功底非常扎實(shí)(特別是離散數(shù)學(xué)、概率、統(tǒng)計(jì)這方面的)你們請(qǐng)離開(kāi)本系列文章——因?yàn)槟銈円呀?jīng)了解到了在科學(xué)計(jì)算領(lǐng)域,Python也是一把不錯(cuò)的兵刃,而你們,被選中的魔法少女(大霧)們,可以去深入了解以下幾個(gè)庫(kù),然后投入到轟轟烈烈的數(shù)據(jù)分析事業(yè)中去吧!

Numpy —— 為Python提供了多維數(shù)組的擴(kuò)展,同時(shí)也提供了豐富的集合運(yùn)算、矩陣運(yùn)算、向量運(yùn)算,可以說(shuō)是Python科學(xué)計(jì)算的基石

matplotlib —— 可產(chǎn)生出版物質(zhì)量的圖表的2D繪圖庫(kù),數(shù)據(jù)可視化是數(shù)據(jù)分析不可或缺的手段之一

pandas —— 數(shù)據(jù)分析庫(kù),包括數(shù)據(jù)框架(dataframes)等結(jié)構(gòu)

Scipy —— 高級(jí)科學(xué)計(jì)算庫(kù),提供了大量的科學(xué)計(jì)算工具及算法,例如本文用到的leastsq最小二乘法求解多項(xiàng)式算法(媽媽再也不用擔(dān)心我要重復(fù)造輪子了!)

這些庫(kù)的相關(guān)資料都非常的好找,而小弟又才疏學(xué)淺,就不再對(duì)它們?cè)谧鬟^(guò)多展開(kāi)了!

因?yàn)樽髡邤?shù)學(xué)水平太差了,我們下期換個(gè)方向玩

按照慣例,放上此次的源碼:
GitHub
其中的char_analysis.py即為本文所屬的函數(shù)擬合例子

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/42121.html

相關(guān)文章

  • 正經(jīng)AI on Python入門(mén)系列】1.1斗圖工具優(yōu)化——實(shí)現(xiàn)文本居中(還混進(jìn)了一些語(yǔ)法基礎(chǔ)

    摘要:大家還記得上一篇文章來(lái)學(xué)點(diǎn)吧從一個(gè)斗圖小工具開(kāi)始中最后提到的幾個(gè)問(wèn)題么,我們這次就來(lái)解決一下其中難度最大的一個(gè)文本居中看,我把代碼優(yōu)化了上次之后,我偷偷把代碼優(yōu)化了,現(xiàn)在的方法長(zhǎng)這樣創(chuàng)建表情圖調(diào)試用生成表情包對(duì)的,我把那些老長(zhǎng)老長(zhǎng) showImg(https://segmentfault.com/img/bVbeDVL?w=250&h=250); 大家還記得上一篇文章0.來(lái)學(xué)點(diǎn)Pyth...

    Luosunce 評(píng)論0 收藏0
  • 正經(jīng)AI on Python入門(mén)系列】0.來(lái)學(xué)點(diǎn)Python吧!從一個(gè)斗圖工具開(kāi)始

    摘要:因此,本文將會(huì)以一些正經(jīng)的嚴(yán)謹(jǐn)?shù)挠猩疃鹊拇蟾虐傻恼n題,慢慢的接觸人工智能的相關(guān)知識(shí)。 Before The Beginning ????近年,技術(shù)圈炒的最火的兩個(gè)話(ba)題(gua)不外乎就是人工智障智能以及炒幣區(qū)塊鏈了,這個(gè)系列文章我主要以一個(gè)小菜鳥(niǎo)的角度一步一步的對(duì)人工智能的相關(guān)知識(shí)做一點(diǎn)了解,也算是一個(gè)顫顫巍巍追著AI浪潮公交車(chē)的社會(huì)主義五好青年,咳咳,扯遠(yuǎn)了...其實(shí)對(duì)于人工...

    趙連江 評(píng)論0 收藏0
  • 深度學(xué)習(xí)

    摘要:深度學(xué)習(xí)在過(guò)去的幾年里取得了許多驚人的成果,均與息息相關(guān)。機(jī)器學(xué)習(xí)進(jìn)階筆記之一安裝與入門(mén)是基于進(jìn)行研發(fā)的第二代人工智能學(xué)習(xí)系統(tǒng),被廣泛用于語(yǔ)音識(shí)別或圖像識(shí)別等多項(xiàng)機(jī)器深度學(xué)習(xí)領(lǐng)域。零基礎(chǔ)入門(mén)深度學(xué)習(xí)長(zhǎng)短時(shí)記憶網(wǎng)絡(luò)。 多圖|入門(mén)必看:萬(wàn)字長(zhǎng)文帶你輕松了解LSTM全貌 作者 | Edwin Chen編譯 | AI100第一次接觸長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò)(LSTM)時(shí),我驚呆了。原來(lái),LSTM是神...

    Vultr 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<