From cf94676aa19ac89c6ca5d67fcf8bc13edb6f934d Mon Sep 17 00:00:00 2001 From: jesset Date: Thu, 23 May 2024 19:36:33 +0800 Subject: [PATCH] Fix: multi-byte characters are not displayed correctly in the generated chart when the Database Language is set to Chinese (zh) (similar issues may occur with other multi-byte languages). - When selecting the Database Language, install the required fonts for matplotlib - Non-multi-byte languages will not be affected --- scripts/daily_plot.py | 10 ++++++++-- scripts/install_language_label.sh | 11 +++++++++++ scripts/install_language_label_nm.sh | 11 +++++++++++ scripts/install_services.sh | 1 + 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/scripts/daily_plot.py b/scripts/daily_plot.py index ff9c839ca..7cfdc276c 100755 --- a/scripts/daily_plot.py +++ b/scripts/daily_plot.py @@ -31,12 +31,18 @@ df_plt = df # Default to use the whole Dbase # Add every font at the specified location -font_dir = [userDir + '/BirdNET-Pi/homepage/static'] +font_dir = [userDir + '/BirdNET-Pi/homepage/static', '/usr/share/fonts/truetype'] for font in font_manager.findSystemFonts(font_dir): font_manager.fontManager.addfont(font) # Set font family globally -rcParams['font.family'] = 'Roboto Flex' +db_lang = os.environ.get('DATABASE_LANG') +if db_lang == 'zh': + rcParams['font.family'] = 'WenQuanYi Zen Hei' + rcParams['font.sans-serif'] = ['WenQuanYi Zen Hei'] + rcParams['axes.unicode_minus'] = False # 解决保存图像是负号—'显示为方块的问题 +else: + rcParams['font.family'] = 'Roboto Flex' # Get todays readings now = datetime.now() diff --git a/scripts/install_language_label.sh b/scripts/install_language_label.sh index 01292882b..8119841d5 100755 --- a/scripts/install_language_label.sh +++ b/scripts/install_language_label.sh @@ -30,4 +30,15 @@ unzip -o $HOME/BirdNET-Pi/model/labels_l18n.zip $label_file_name_flickr \ && mv -f $HOME/BirdNET-Pi/model/$label_file_name_flickr $HOME/BirdNET-Pi/model/labels_flickr.txt \ && logger "[$0] Set Flickr labels '$label_file_name_flickr'"; +# install corresponding fonts for display characters in daily_plot +case "${lang}" in + zh) + sudo apt install -y fonts-wqy-zenhei \ + && logger "[$0] Install language:${zh} needed fonts"; + ;; + *) + true + ;; +esac + exit 0 diff --git a/scripts/install_language_label_nm.sh b/scripts/install_language_label_nm.sh index 4569a0c9b..056884724 100755 --- a/scripts/install_language_label_nm.sh +++ b/scripts/install_language_label_nm.sh @@ -30,4 +30,15 @@ unzip -o $HOME/BirdNET-Pi/model/labels_nm.zip $label_file_name_flickr \ && mv -f $HOME/BirdNET-Pi/model/$label_file_name_flickr $HOME/BirdNET-Pi/model/labels_flickr.txt \ && logger "[$0] Set Flickr labels '$label_file_name_flickr'"; +# install corresponding fonts for display characters in daily_plot +case "${lang}" in + zh) + sudo apt install -y fonts-wqy-zenhei \ + && logger "[$0] Install language:${zh} needed fonts"; + ;; + *) + true + ;; +esac + exit 0 diff --git a/scripts/install_services.sh b/scripts/install_services.sh index 1585259e2..5b9a7fa6d 100755 --- a/scripts/install_services.sh +++ b/scripts/install_services.sh @@ -312,6 +312,7 @@ Restart=always RestartSec=120 Type=simple User=$USER +EnvironmentFile=${config_file} ExecStart=$PYTHON_VIRTUAL_ENV /usr/local/bin/daily_plot.py [Install] WantedBy=multi-user.target