你好呀,我是歪歪。
正如標題說的,我覺得小米這波的格局顯得有點小了。
事情是這樣的 8 月 10 日晚上雷總不是釋出會嗎,就小米十週年那個。
我全程看完了,後來雷總給我整感動了,剛好那段時間在物色一個平板,想要提升一下生產力,所以我當即就在小米有品的APP 上預定了一款:
隔了段時間,我上去看,發現有一個曬單贈保護殼和鋼化膜的活動。
點選詳情一看,活動規則是這樣的:
所以我收到平板之後,當天晚上裡面就給它刷了一個五星好評。
說真的,評論中的“驚豔”、“音效”都是我拆箱體驗後的真實感受,直到現在我都被它的八揚聲器折服。
但是如果它沒有這個活動,我肯定也懶得去評論這一波。
我評論的時候特意看了一下,評論總數確實沒有超過 1000,可惜當時忘記截圖了。
反正當時心裡覺得這波肯定是穩得一筆。
就坐等收貨就完事了。
啪的一下,很快啊,一個月過去了,時間就來到了 9 月 18 號。
我突然又想起了這事,然後登陸 APP 去看了一下中獎名單。
這個時候,有意思的事情就出現了。
首先,它公佈的名單居然是一個長圖,圖片裡面只包含序號、訂單號、使用者 ID 這三個資訊:
圖片意味著什麼你知道吧?
意味著我不能搜尋我的訂單號或者使用者 ID。
於是我就一個個的看。
看了大概兩分鐘我就覺得這事不對,不知道是出於什麼目的給了圖片,完美遮蔽了搜尋功能,反正這樣的使用者體驗讓我感到噁心。
當時我就幡然醒悟:我為什麼要傻乎乎的自己看呢?1000 個訂單號啊,我得看到什麼時候去?
在那個時刻,我的內心想法還是:這裡面一定有我,只是我懶得找而已。
所以,我決定向客服求助,於是發生了這樣的對話:
但是在這裡我必須要說一句,當時對接我的那個客服態度是真的很好,很不錯,讓我感覺很舒服。
但是這使用者體驗是真的很神奇,為了讓你有個直觀的感受我把圖片也放在這裡一下:
怎麼樣,想在這裡面找到指定的訂單號,是不是稍顯困難了一點?
而且,這才 150 個訂單...
假設,我真的從 1000 個裡面去找自己,可能要把自己眼睛看瞎吧。而且看完一次後發現:咦,怎麼沒有我?我看漏了?再來一次。
於是眼睛得更加仔細的又瞎一次。
總之,最後讓客服幫我看了,最後的結論就是沒有我。
我當時心想沒有就算了吧,這玩意又不公開透明的,我也沒法啊。
但是隔了幾天後,我偶然間看小米社群裡面再說這個事。
於是我又開啟有品 APP 的評論頁,隨手翻了幾條評論,發現下面說這個事情的還挺多,我隨便擷取幾個:
原來不是我一個人有這樣的困惑呀,那就有點意思了。
我決定玩一玩。
圖片識別
首先,我要明確的是那 1000 個訂單號的圖片裡面確實沒有我,因為我確實沒有一個個的去看。
所以,我要再次確認一下。
當然了,我肯定不可能一個個的去找。
所以,我想起了圖片識別技術。
於是我再某瀏覽器按照關鍵字搜尋,一看到前兩個就是熟悉的味道:
自己給自己打廣告,沒毛病。
點進去一看,好傢伙,免費使用。
正合我意,那就用起來吧。
之前也沒接觸過這個領域,讓我徒手擼程式碼肯定是不現實的。
但是按照我多年作為程式設計師的直覺肯定是有 SDK 包,然後把裡面的引數改改就能跑起來,Demo 嘛,能出結果就行了,沒有這麼多講究。
所以我第一件事就是找官方文件,文件裡面肯定有 SDK 包的下載地址。
https://cloud.baidu.com/doc/OCR/s/Ek3h7xypm
果不其然,一眼就被我發現了:
很快我就把程式碼拉下來了,在 idea 裡面配置好了。
然後按照文件上的提示把這個方法粘到專案裡面去:
接下來有兩個問題。
第一個是按照程式碼提示,我需要 APP_ID、API_KEY、SECRET_KEY。
這個問題很好解決,去建立一個應用,非常簡單的點幾個下一步,就可以拿到對應的這些引數了:
我這有一個配置,你要想玩的話可以直接拿去用,但是免費版,有呼叫次數限制
public static final String APP_ID = "24883148";
public static final String API_KEY = "VVBoWjFADAOPTONBRif5DG6G";
public static final String SECRET_KEY = "u7w61bHlaDpKRbWaXM8GzxDrifLKwVXS";
第二個問題是我需要找到呼叫的介面,這個也是在官方文件上面一下就找到了:
它這裡有很多的場景,我現在需要的場景就是數字識別。
在 SDK 裡面也可以找到:
現在都齊活了,我只需要把 main 方法跑起來應該就能看到結果了。
可是當我跑起來之後...
圖片太大了。
於是,我先截了個小的圖片,先試驗一下功能是不是正常。
再次跑起來,發現沒毛病了,識別出來了:
現在只剩下最後一個問題,圖片太大了,怎麼解決呢?
很簡單,圖片拆分嘛,把一個圖片拆分成多張,我在網上找到的下面這串程式碼就能幹這事:
public class ReadPicNum1 {
private static final String IMAGE_FILE_PATH = "D:\\Pic\\1.jpg";
//橫向分隔個數
private static final int SEP_X_NUM = 1;
//縱向分隔個數
private static final int SEP_Y_NUM = 3;
public static void main(String[] args) throws Exception {
cutPic();
}
public static String cutPic() throws Exception {
File file = new File(IMAGE_FILE_PATH);
if (!file.exists() || !file.isFile()) {
throw new RuntimeException("file not exists or un-file:" + IMAGE_FILE_PATH);
}
BufferedImage image = ImageIO.read(file);
int totalWidth = image.getWidth();
int totalHeight = image.getHeight();
int width = totalWidth / SEP_X_NUM;
int height = totalHeight / SEP_Y_NUM;
File dirFile = new File(file.getParent(), file.getName().substring(0, file.getName().lastIndexOf(".")));
if (!dirFile.exists()) {
dirFile.mkdir();
}
for (int y = 0, j = 1; y <= totalHeight - height; y += height, j++) {
for (int x = 0, i = 1; x <= totalWidth - width; x += width, i++) {
File targetFile = new File(dirFile, j + "_" + i + ".jpg");
BufferedImage targetImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = targetImage.getGraphics();
g.drawImage(image.getSubimage(x, y, width, height), 0, 0, null);
ImageIO.write(targetImage, "JPG", targetFile);
}
}
return dirFile.getPath();
}
}
最終呈現出來的效果是這樣的:
現在程式就位,可以大刀闊斧的開始幹了。
我只需要把中獎名單的那個長圖的連結找到,然後透過連結把圖片下載到本地,再用上面的程式把圖片分割成 100 張,最後一張張的識別出來,把結果直接輸出到控制檯,不就能知道有沒有我的訂單號了嗎?
我可真是個天才。
但是,當我再次開啟頁面,想要實施我的計劃的時候,好傢伙,中獎名單沒有了!
我尋思這也沒公佈幾天呀,怎麼就沒了呢
於是我再次看了活動規則,只說了公佈開始時間,沒說啥時候撤銷公佈:
看來此路是行不通了,而且我預計就算是我識別出來了,裡面肯定也是沒有我的,我只是不到黃河不死心而已。
雖然在活動規則裡面沒有看到名單公佈的截止時間,但是我看到了另外一個東西,讓我眼前一亮,故事也隨之峰迴路轉:
如果我沒有猜測的話,它這句話的意思就是:按照評論的系統時間排序,取前 1000 個有效評論,即為中獎名單。
等等,評論?
評論我還是可以看到的呀,就在商品詳情頁面:
在這裡我可以看到所有的評論和所有的評論時間。
那麼...
我是不是不經意間把評論全部扒下來,然後一不小心把資料都放到資料庫裡面去,接著莫名其妙的按照評論時間排個序,最後非常偶然的瞟一眼自己的名字,不就可以知道自己是不是在按照時間排序的評論的前 1000 之內了嗎?
說幹就幹,幹之前我查了,這事合法的,放心。
扒評論
果然,在不經意間我就發現了這樣的一個地方:
好巧啊,這不就是我的評論嗎?
而且經過分析,我發現它返回的 ctime 欄位就是評論時間,只是它按照時間戳的方式返回的,我在後面加上三個 0,就是我的真實評論時間:
接下里的事情就簡單了,我只需要寫一段程式碼,寫程式碼的時候一不小心把這些評論資料都放到資料庫裡面去:
3751條評論,一不小心就都在這裡面來了。
查一下自己,看看有沒有重名的:
查出來之後,我發現我的準確評論時間是 2021-08-18 22:40:28。
然後,我又莫名其妙的寫了這樣一條 SQL,反正我也不懂啥意思:
如果我的數學老師沒有騙我,那麼我可以大膽的推測 959 應該是小於 1000 的。
也就是說,我應該是中獎了呀?為什麼名單上沒有我呢?
當然了,也有可能還有一部分評論在後臺稽核中,還沒放出來,這玩意誰知道呢?
只是我覺得這活動都結束了,稽核還沒結束,會不會有點牽強呀?
咱也不敢問,咱也不敢說呀。
既然評論資料都有了,我就順便看看那個版本的小米平板賣的最好吧:
果然是 6+128G 的黑色,2499 元的價格,還要啥腳踏車。價效比拉滿了好嘛。
雖然我買的是 6+256G 的,但是首發價 2699 元,加 200 多 128G 記憶體,我覺得這波不虧。
最後,評論都有了,來都來了,那就順手做個詞雲吧。
這是基於所有評論做的詞雲,一片叫好:
這是過濾出來評論中和 1000 名活動相關的評論做出來的詞雲,略有不佳:
反正我感覺吧,這活動,你直接說抽獎不就完了嗎?
哦,抽獎的話我可能就不會去參與了。
當然了,這只是我個人的一些吐槽,小米在我心中就是一家非常偉大的公司,向雷布斯致敬。
但是一碼歸一碼,在小米有品上搞的這個活動,沒搞好,不透明,格局小了。
再說說圖片識別
其實我在做圖片識別的時候發現還有其他很多好玩的東西:
比如影象特效我就玩了一下,如果你也想玩一下的話,需要更換一下引數。
其他的按照官方文件自己玩就行了:
public static final String APP_ID = "24886324";
public static final String API_KEY = "hxSlOK6C5BTjHyXxkQuNuL7V";
public static final String SECRET_KEY = "skST5eXm861Cw4az5vPZbevNlcOmaKYZ";
這是黑白照片上色後的效果,反正我是覺得有點詭異:
但是我試了一下家裡的多年前爺爺奶奶輩的黑白照片,效果還稍微可以一點。
然後試了試人物動漫化的介面,我實在忍不住想笑:
最後,其實前面出現的圖片拆分的程式碼,還有另外一個功能,比如你把它修改為 3*3 的模式:
那麼最終出來的效果就是這樣的:
你明白我的意思吧?
就可以在朋友圈裝B了,雖然我覺得沒有任何卵用:
本文已收錄自個人部落格,歡迎大家來玩。
https://www.whywhy.vip/
同時部落格也修復了一些大家反饋的問題。謝謝大家的支援,我會慢慢的持續最佳化的: