How to remove multiple redundant indexes?
The question cannot be answered without seeing the SELECTs.

Here are some partial answers...


The only obviously redundant queries are pick_id and item_id_4. The rule is simple:  If all the column(s) of an index are exactly the first column (s) of some other index, then toss it.  (Note: This applies only to non-unique indexes.)
The next set of apparent duds are (is_*).  These all seem to be true/false "flags".  The Optimizer won't use such (with rare exceptions).  It will, on the other hand, consider INDEX(is_foo, ...).  That is a composite index starting with a flag.  (And, no, the low cardinality of the first column is not bad.)
5 columns in an index is pushing the max that it "should" have.  I would be tempted to keep one of the 5-column indexes starting with (item_id,module_id,item_type,is_file).  The ones I tossed would still be benefit, at some level, by the one I keep.
Reordering the columns depends on what the SELECTs look like.  If the user can request "any" combination of columns to filter, then punt.  Well, not totally punt...  Make a few combinations of 2 or 3 columns.
INDEX(a,b,c) is not the same as INDEX(a,b), INDEX(c).  Some queries benefit from one; some from the other.


See also: Cookbook on generating indexes